!!!
(спасибо за @pmahoney https://github.com/docker/compose/issues/890#issuecomment-159750418)
echo $CURL_CA_BUNDLE
unset CURL_CA_BUNDLE
docker-compose up
!!!
Привет,
Как мне советовали в https://github.com/docker/compose/issues/890#issuecomment -141495624 (спасибо @posita за помощь), я хочу поднять новую проблему, с которой я не могу заставить работать docker-compose. мой макинтош.
Стоит отметить, что у меня установлены python и OpenSSL через brew, все пакеты обновлены.
Я пытался установить docker & co двумя способами:
Но каждый раз у меня возникала проблема с SSL.
Сейчас у меня следующая установка:
OpenSSL 0.9.8zg 14 July 2015
docker-compose version: 1.4.0
docker-machine version 0.4.1 (e2c88d6)
Python 2.7.10
И вот что у меня получается при docker-compose:
Как предположил @posita , проблема
https://github.com/docker/compose/issues/890#issuecomment -141473612
И сертификаты создаются во время подготовки и создания докер-машины, поэтому я создал здесь проблемы.
Однако я не специалист в этой области :( Но я хочу, чтобы на моем Mac по-прежнему работала docker-compose.
Насколько я понимаю, наиболее полная отладочная информация - это результат следующей команды:
(
set -x
eval $( docker-machine env shiny-new-machine-74d5a19e )
env | grep DOCKER
ls -al "${DOCKER_CERT_PATH}"
openssl x509 -in "${DOCKER_CERT_PATH}/cert.pem" -text
openssl x509 -in "${DOCKER_CERT_PATH}/ca.pem" -text
docker-compose --verbose version
docker-compose --verbose ps
DOCKER_TLS_VERIFY=0 docker-compose --verbose ps
) >"${HOME}/Desktop/docker-compose-890-outerr-$( date -u +%Y-%m-%dT%H:%M:%SZ ).txt" 2>&1
Здесь вы можете найти его: http://pastebin.com/vWqZgVKi
Любой совет приветствуется.
Спасибо за помощь!
С Уважением,
Любые мысли приветствуются, я застрял и не хочу переустанавливать свою ОС, чтобы заставить работать docker-compose :)
Спасибо за сообщение. Вы случайно используете виртуальную машину boot2docker с машиной?
Это может быть отвлекающим маневром, но я заметил одну вещь: docker-machine
+ boot2docker
не полагается на сертификаты, сгенерированные по умолчанию boot2docker
. Скорее кажется, что машина сама генерирует. Когда это произойдет, Subject
в cert.pem
будет таким же, как Issuer
(т. Е. Таким же, как Subject
ca.pem
) .
Из-за ошибки в некоторых (недавних) версиях OpenSSL, это практически то же поведение, которое вызывало аналогичные ошибки при использовании инструментов Docker напрямую с boot2docker
(т.е. _without_ docker-machine
; см. Также boot2docker / boot2docker # 1029 и SvenDowideit / generate_cert # 10). Исправление было выпущено с boot2docker
1.8.0 ( @eaaaeae ). Однако, как я уже упоминал, (потенциально) проблемное поведение, похоже, сохраняется при использовании машины из-за собственной обработки сертификатов машины.
Я рекомендую установить патч на машину, чтобы убедиться, что Subject
из cert.pem
отличается от ca.pem
а затем попросить @PavelPolyakov протестировать его в своей среде. Если исправленная машина заставит его исправить ошибку, я думаю, у вас есть исправление. Если нет, то это что-то еще, что выходит за рамки моего понимания проблемы.
Я бы отправил PR, но я (пока) не очень разбираюсь в Go, и я не знаком с тем, как машина обрабатывает создание / установку сертификатов с помощью boot2docker. К сожалению, мое текущее расписание не позволяет мне выделить необходимое время, чтобы набрать скорость. Вместо этого я надеюсь, что это резюме будет полезным.
@ehazlett
Извините, я не понял вопроса.
Вот как была создана машина:
docker-machine create --driver virtualbox my-docker-machine
Последний образ был загружен из Интернета.
@posita
Спасибо за помощь, готовы протестировать все, что может привести к успеху.
@ehazlett
Привет, ребята, не могли бы вы мне помочь? И как заставить его работать?
С Уважением,
@rklt
Пробовал что:
Вроде результат такой же.
Есть другие мысли?
@PavelPolyakov Простите, я ошибся ...
Ищу решение ...
@PavelPolyakov Готово. Вот что сделал:
docker-machine regenerate-certs
export DOCKER_HOST=tcp://192.168.99.100:2376
export DOCKER_CERT_PATH=/Users/$USERNAME/.docker/machine/certs
export DOCKER_TLS_VERIFY=1
Ошибка исчезла.
@rkit
Спасибо за решение.
Пытаюсь это реализовать.
Однако пара вопросов:
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-machine rm default
Successfully removed default
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-machine regenerate-certs *[master]
Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Error: Expected to get one or more machine names as arguments.
export DOCKER_HOST=tcp://192.168.99.100:2376
export DOCKER_CERT_PATH=/Users/$USERNAME/.docker/machine/certs
export DOCKER_TLS_VERIFY=1
eval "$(docker-machine env dev)"
, но env по умолчанию из профиля bash, и я добавил эту строку в конфигурацию:export DOCKER_CERT_PATH=/Users/$USERNAME/.docker/machine/certs
После этого ошибки не было.
Правильно ли я интерпретирую, что требование regenerate-certs
- это обходной путь, который подтверждает мои предположения о причине этой проблемы? IE, этот docker-machine
имеет родственную проблему с boot2docker / boot2docker # 808 (см. Также docker / docker-py # 465, docker / compose # 890), которая не была решена с помощью boot2docker / boot2docker # 1029, потому что docker-machine
игнорирует сертификаты по умолчанию boot2docker
и создает свои собственные? Это точное резюме?
@rkit
Извините, у меня осталось то же самое :(
Что я сделал:
docker-machine rm default
docker-machine create --driver virtualbox default
docker-machine regenerate-certs default
eval "$(docker-machine env default)"
export DOCKER_CERT_PATH=/Users/$USERNAME/.docker/machine/certs
Я что-то упустил? Есть мысли, как я могу это преодолеть?
Могу ли я предоставить дополнительную отладку?
@PavelPolyakov , после выполнения regenerate-certs
и eval
, вы можете сделать:
for i in ca cert ; do c="${DOCKER_CERT_PATH}/${i}.pem" ; ( set -x ; openssl x509 -in "${c}" -text | grep -E '^ +(Issuer|Subject): ' ) ; done
@posita
Спасибо, вот и мы:
Итак, regenerate-certs
самом деле не решает (потенциальную) проблему, когда ca.pem
Subject == cert.pem
Subject. : разочарованный: Другими словами:
+-zsh:xxx> openssl x509 -in /.../.docker/machine/certs/ca.pem -text
+-zsh:xxx> grep ... -E '^ +Subject: '
Subject: O=[thing] # <<<-- THIS SHOULD *NOT*
+-zsh:xxx> openssl x509 -in /.../.docker/machine/certs/cert.pem -text
+-zsh:xxx> grep ... -E '^ +Subject: '
Subject: O=[thing] # <<<-- EQUAL THIS
Если это так, и у вас «неправильная» версия OpenSSL (то есть любая версия, которая обнаруживает эту ошибку ), вы получите [SSL: CERTIFICATE_VERIFY_FAILED]
.
Я подозреваю, что именно поэтому у вас все еще есть проблемы, и почему предложение @rkit не работает.
Привет, ребята, @rkit , @ehazlett , есть мысли, как мне это преодолеть?
@PavelPolyakov , для [machine-name]
на ваше настоящее имя машины)?
% eval $( docker-machine env [machine-name] )
% docker-machine ssh [machine-name]
...
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3
docker<strong i="8">@boot2docker</strong>:~$ rm -fv ~docker/.docker/* # get rid of copies of certificates we're about to destroy
removed '/home/docker/.docker/ca.pem'
removed '/home/docker/.docker/cert.pem'
removed '/home/docker/.docker/key.pem'
docker<strong i="9">@boot2docker</strong>:~$ sudo -s
root<strong i="10">@boot2docker</strong>:/home/docker# cat /var/lib/boot2docker/profile # so I can see what is being overridden
...
root<strong i="11">@boot2docker</strong>:/home/docker# rm -fv /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/* # remove any existing certificates
...
root<strong i="12">@boot2docker</strong>:/home/docker# /usr/local/etc/init.d/docker restart
... # should regenerate default certificates
root<strong i="13">@boot2docker</strong>:/home/docker# exit
docker<strong i="14">@boot2docker</strong>:~$ exit
% rm -v "${DOCKER_CERT_PATH}"/*.pem # remove host-side (stale) certificates
...
% docker-machine scp [machine-name]:/home/docker/.docker/\*.pem "${DOCKER_CERT_PATH}" # copy newly-created certificates from machine to host
...
% docker ps
...
% docker-compose ps
...
% openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
...
По сути, мы пытаемся избежать создания сертификатов docker-machine
и вместо этого полагаемся на механизм по умолчанию boot2docker
. Выполнив вход в экземпляр boot2docker
, удалив сертификаты, а затем перезапустив docker
, мы запускаем этот процесс. Затем мы заменяем сертификаты на стороне хоста теми, которые мы только что получили boot2docker
для (повторного) создания.
@posita
Не удается восстановить сертификаты
Первый:
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3
docker<strong i="9">@default</strong>:~$ rm -fv ~docker/.docker/*
removed '/home/docker/.docker/ca.pem'
removed '/home/docker/.docker/cert.pem'
removed '/home/docker/.docker/key.pem'
docker<strong i="10">@default</strong>:~$ sudo -s
root<strong i="11">@default</strong>:/home/docker# cat /var/lib/boot2docker/profile
EXTRA_ARGS='
--label provider=virtualbox
'
CACERT=/var/lib/boot2docker/ca.pem
DOCKER_HOST='-H tcp://0.0.0.0:2376'
DOCKER_STORAGE=aufs
DOCKER_TLS=auto
SERVERKEY=/var/lib/boot2docker/server-key.pem
SERVERCERT=/var/lib/boot2docker/server.pem
root<strong i="12">@default</strong>:/home/docker# rm -fv /var/lib/boot2docker/tls/*
removed '/var/lib/boot2docker/tls/ca.pem'
removed '/var/lib/boot2docker/tls/cakey.pem'
removed '/var/lib/boot2docker/tls/cert.pem'
removed '/var/lib/boot2docker/tls/hostnames'
removed '/var/lib/boot2docker/tls/key.pem'
removed '/var/lib/boot2docker/tls/server.pem'
removed '/var/lib/boot2docker/tls/serverkey.pem'
Потом:
root<strong i="16">@default</strong>:~# /usr/local/etc/init.d/docker restart
Need TLS certs for default,127.0.0.1,10.0.2.15,192.168.99.104
-------------------
Generating CA cert
2015/09/25 18:06:48 Preventing overwrite: the following files already exist: "/var/lib/boot2docker/ca.pem". To overwrite files, add `--overwrite`.
rm: can't remove '/var/lib/boot2docker/server.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/server-key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/cert.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/key.pem': No such file or directory
Generate server cert
/usr/local/bin/generate_cert --host=default,127.0.0.1,10.0.2.15,192.168.99.104 --ca=/var/lib/boot2docker/ca.pem --ca-key=/var/lib/boot2docker/tls/cakey.pem --cert=/var/lib/boot2docker/server.pem --key=/var/lib/boot2docker/server-key.pem --org=Boot2Docker
2015/09/25 18:06:48 Generating a server cert
2015/09/25 18:06:48 Failure to generate cert: open /var/lib/boot2docker/tls/cakey.pem: no such file or directory
Generating client cert
2015/09/25 18:06:48 no --host parameters, making a client cert
2015/09/25 18:06:48 Failure to generate cert: open /var/lib/boot2docker/tls/cakey.pem: no such file or directory
cp: can't stat '/var/lib/boot2docker/tls/cert.pem': No such file or directory
cp: can't stat '/var/lib/boot2docker/tls/key.pem': No such file or directory
Ах хорошо. Я боялся этого ( /var/lib/boot2docker/profile
отменяет некоторые местоположения по умолчанию). Попробуйте то же самое, но вместо:
root<strong i="7">@default</strong>:/home/docker# rm -fv /var/lib/boot2docker/tls/*
Делать:
root<strong i="11">@default</strong>:/home/docker# rm -fv /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/*
@posita
rm -fv /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/*
removed '/var/lib/boot2docker/ca.pem'
removed '/var/lib/boot2docker/tls/hostnames'
root<strong i="7">@default</strong>:~# /usr/local/etc/init.d/docker restart
Need TLS certs for default,127.0.0.1,10.0.2.15,192.168.99.104
-------------------
Generating CA cert
2015/09/25 18:18:14 Generating a new certificate authority.
rm: can't remove '/var/lib/boot2docker/server.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/server-key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/cert.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls//hostnames': No such file or directory
Generate server cert
/usr/local/bin/generate_cert --host=default,127.0.0.1,10.0.2.15,192.168.99.104 --ca=/var/lib/boot2docker/ca.pem --ca-key=/var/lib/boot2docker/tls/cakey.pem --cert=/var/lib/boot2docker/server.pem --key=/var/lib/boot2docker/server-key.pem --org=Boot2Docker
2015/09/25 18:18:15 Generating a server cert
Generating client cert
2015/09/25 18:18:15 no --host parameters, making a client cert
root<strong i="8">@default</strong>:~# ls /var/lib/boot2docker/tls/
cakey.pem cert.pem hostnames key.pem
(выход; выход)
но потом:
[~/tmp/microservices-workshop/msworkshop/step4]$ docker ps *[master]
An error occurred trying to connect: Get https://192.168.99.104:2376/v1.20/containers/json: x509: certificate signed by unknown authority
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose ps *[master]
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
последняя команда:
openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem"
CONNECTED(00000003)
depth=0 O = default
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = default
verify error:num=21:unable to verify the first certificate
verify return:1
140735289209680:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:s3_pkt.c:1472:SSL alert number 42
140735289209680:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
Certificate chain
0 s:/O=default
i:/O=PavelPolyakov
-----BEGIN CERTIFICATE-----
MIIDADCCAeqgAwIBAgIQR4h88WLsll8AkYK6MIeEMTALBgkqhkiG9w0BAQswGDEW
MBQGA1UEChMNUGF2ZWxQb2x5YWtvdjAeFw0xNTA5MjMxNjMwMDBaFw0xODA5MDcx
NjMwMDBaMBIxEDAOBgNVBAoTB2RlZmF1bHQwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQC7MYqKigy4aJCPiaCQrOKypICUYbIvLYtHKCYG7d9d274MuYWf
dH7mMKTTu8M3GOrAzUj+tvHDAHIZgV0nDMz5qwEkYI2JD7N7hcHQ91JUPJVVpV3e
v2v4hzFra8KB/9h4grjTwAnMLLJNNcWUwu8JPvy3xRmBjpl8UIVY1+VLYwiLodfS
7bWBdqYy2E0sxoJjgtNVPWgxkOloApOrQhq0t/HcyXv0mA3hVPG+9J1r5Mxqs0nY
/qIMKGpywhTGqsWfDnBe22Bf2tFHagDN0frLRrIrF8HT8Xggwawz9pN4RpRWUrI0
lAsgxznXZR1xnvffbxmdy2P94BX1UHqzVy/dAgMBAAGjUDBOMA4GA1UdDwEB/wQE
AwIAqDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIw
ADAPBgNVHREECDAGhwTAqGNoMAsGCSqGSIb3DQEBCwOCAQEAYoGQ5x3wXGVxZey9
dcxyVnBkYSZiInVIeI+bdsKtxKUv7HoXRW1iLyKSeNq8BGQzpfaEPkDtfblcEctz
U0Oj7jS4MlrdzGK1A75Bl8Bo1VDpu146M8cp/Wa09tjmrJktMrVOVZVQteDCPmZo
RIgaHWH0gRJPOy2SCTvLhmyZTK0bO2YKpgvjf2f7NMw6GBJi1hgcZuw3wDjVutjS
2hOWh2HeVyguu1na+YTpZ0csH+MSrKt79ulBpZ3SlYiG5pDFJ5Bjf74OpL0KW30Z
sBA51T1y3Xfyohb27XT28mJLa5Q1cH1PTnComd4K9AlVy7zY0u/MlDN8kaZb0ggX
pqpv2Q==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=default
issuer=/O=PavelPolyakov
---
Acceptable client certificate CA names
/O=PavelPolyakov
Client Certificate Types: RSA sign, ECDSA sign
Requested Signature Algorithms: RSA+SHA256:ECDSA+SHA256
Shared Requested Signature Algorithms: RSA+SHA256:ECDSA+SHA256
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1247 bytes and written 138 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID:
Session-ID-ctx:
Master-Key: C628B5966CBC7A394199AF9D0ECA66BF01744B865D7595D3F3080158A9C9AEDA72B53714D24FCFF11F542F38CBB5CC50
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1443205317
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
Вы сделали это после выхода из docker-machine ssh [machine-name]
но перед выполнением docker ps
?
% rm -v "${DOCKER_CERT_PATH}"/*.pem
...
% docker-machine scp [machine-name]:/home/docker/.docker/\*.pem "${DOCKER_CERT_PATH}"
...
Имейте в виду, что вам все равно необходимо заменить сертификаты на стороне хоста на те, которые вы только что получили. boot2docker
для (повторного) создания перед выполнением команд docker
или docker-compose
на хосте. . В противном случае вы получите несоответствие сертификатов, подобное тем, с которыми вы столкнулись.
Кстати, вам, вероятно, придется начать с начала шагов, которые я описываю в моем https://github.com/docker/machine/issues/1880#issuecomment -143227151. Я обновил этот комментарий, чтобы отразить изменение в моем https://github.com/docker/machine/issues/1880#issuecomment -143312225.
В моем $ DOCKER_CERT_PATH у меня есть новые (я так думаю) сертификаты, расположенные:
[~/.docker/machine/certs]$ ls
ca.pem cert.pem key.pem
Однако docker ps
говорит:
[~/.docker/machine/certs]$ docker ps
An error occurred trying to connect: Get https://192.168.99.104:2376/v1.20/containers/json: x509: certificate signed by unknown authority
Я предполагаю, что ваш снимок экрана был просто для отображения деталей cert.pem
, а не для того, чтобы вы добавили какие-либо из этих файлов *.pem
в какую-либо из ваших цепочек ключей OS X, верно?
Где-то есть несоответствие. Что это дает вам прямо сейчас?
openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem"
Если вы не получаете результат, который выглядит примерно так, вам, вероятно, нужно начать с нуля, выполнив шаги, описанные в моем https://github.com/docker/machine/issues/1880#issuecomment -143227151.
...
---
Certificate chain
0 s:/O=Boot2Docker
i:/O=Boot2DockerCA
...
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2DockerCA
---
Acceptable client certificate CA names
/O=Boot2DockerCA
...
Да, это всего лишь информация, я не добавлял их в связку ключей. Но они находятся в моем DOCKER_CERT_PATH.
Однако у меня остались:
Certificate chain
0 s:/O=default
i:/O=PavelPolyakov
и т. д., попробую снова начать, спасибо за помощь!
У меня та же проблема. Я выполнил шаги, перечисленные выше, и у меня есть следующие подписанные сертификаты:
+ openssl x509 -in /Users/cschmid/.docker/machine/certs/ca.pem -text
+ grep -E '^ +(Issuer|Subject): '
Issuer: O=Boot2DockerCA
Subject: O=Boot2DockerCA
+ openssl x509 -in /Users/cschmid/.docker/machine/certs/cert.pem -text
+ grep -E '^ +(Issuer|Subject): '
Issuer: O=Boot2DockerCA
Subject: O=Boot2Docker
Но когда я пытаюсь запустить docker-compose, я продолжаю получать ошибку
Chriss-MacBook-Pro:docker cschmid$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Chriss-MacBook-Pro:docker cschmid$ docker-compose ps
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
Я запускаю docker-compose 1.4.2, docker 1.8.2 и у меня установлен openssl v1.0.1j_1.
@cischmidt , что это вам дает (в том же env)?
openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
Ответ об ошибке, но это может быть связано с тем, что мне нужно подключиться к докеру через localhost из-за моего клиента Cisco VPN:
Chriss-MacBook-Pro:docker cschmid$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
CONNECTED(00000003)
50891:error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_clnt.c:593:
Мои переменные среды докера:
DOCKER_HOST=tcp://127.0.0.1:2376
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/cschmid/.docker/machine/certs
@cischmidt , у вас OS X, верно? Я не понимаю вашу настройку DOCKER_HOST
. :смущенный:
Я использую Mac OS X. Я перенаправляю порт с моей виртуальной машины virtualbox на localhost: 2376, чтобы обойти проблемы маршрутизации, возникающие при каждом подключении к VPN. Команды, связанные с Docker, хорошо работают с этой конфигурацией, и я помню, как несколько месяцев назад без проблем использовал docker-compose (сегодня первый день за некоторое время, когда я снова начал использовать docker-compose).
@cischmidt , просто для подтверждения, localhost:2376
указывает на вашу docker-machine
виртуальную машину, работающую на вашем локальном компьютере? Ваша docker-machine
VM boot2docker
(например, работает в VirtualBox)?
@PavelPolyakov и @cischmidt , можете ли вы сделать следующее после выполнения описанных выше шагов в моем https://github.com/docker/machine/issues/1880#issuecomment -143227151? Нет необходимости повторять эти шаги снова, если вы все еще находитесь в той же среде, а машина все еще работает.
% docker-machine ssh [machine-name]
docker<strong i="15">@boot2docker</strong>:~$ export DOCKER_CERT_PATH="${HOME}/.docker" DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://127.0.0.1:2376
docker<strong i="16">@boot2docker</strong>:~$ docker ps
...
docker<strong i="17">@boot2docker</strong>:~$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
...
docker<strong i="18">@boot2docker</strong>:~$ exit
@ehazlett , docker-machine
выполняет какую-то магию SSL-прокси или туннеля с boot2docker
?
@cischmidt , просто чтобы подтвердить, localhost: 2376 указывает на виртуальную машину докер-машины, работающую на вашем локальном компьютере? Ваша виртуальная машина docker-machine boot2docker (например, работает в VirtualBox)?
Да это верно. Я запускаю докер-машину против виртуальной машины boot2docker в VirtualBox. Это также преобразованная виртуальная машина, которую для меня создала старая версия boot2docker для Mac.
Chriss-MacBook-Pro:docker cschmid$ docker-machine ssh default
...
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker<strong i="10">@default</strong>:~$ export DOCKER_CERT_PATH="${HOME}/.docker" DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://127.0.0.1:2376
docker<strong i="11">@default</strong>:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker<strong i="12">@default</strong>:~$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
CONNECTED(00000003)
depth=1 O = Boot2DockerCA
verify return:1
depth=0 O = Boot2Docker
verify return:1
139887085803152:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1197:SSL alert number 42
139887085803152:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
Certificate chain
0 s:/O=Boot2Docker
i:/O=Boot2DockerCA
-----BEGIN CERTIFICATE-----
MIIC9TCCAd+gAwIBAgIRAKmIA6DlGQTnpVHJLetbUvAwCwYJKoZIhvcNAQELMBgx
FjAUBgNVBAoTDUJvb3QyRG9ja2VyQ0EwHhcNMTUwOTI1MDM1NDEyWhcNMTYwOTI0
MDM1NDEyWjAWMRQwEgYDVQQKEwtCb290MkRvY2tlcjCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAMZBiSJRdlzGCozwZAswmKl14ZvMoP7AnK7E5+mba3Xi
NRNjaIBP7YN7s2N121chvoKO0NmMM+h5AyCH6OU7R2HXOLNmZZu5O7bzQ7/sishm
NIdi625zw/alaHieikx2YSK4e6ZXuj+ws/CcoNpTHatSZnEl6uUCZHMkNJWmGYMQ
tWqyRFkm84N7yTtTzNgIaWC530TKDvGRoTl3y/VPG8DnHeMSHKc4xTKeoVTvjaDM
jDXr83/sFfmodfoavAQKVpXoWb+ZcjA1Ma/u96AMW9g0vbnxFfzTr1BwhGxGVwzY
eqiIKhz7YDdq4INJbPsRQ/q8TR86Tp5qPaRQLQLMdVMCAwEAAaNAMD4wDgYDVR0P
AQH/BAQDAgCgMAwGA1UdEwEB/wQCMAAwHgYDVR0RBBcwFYIHZGVmYXVsdIcEfwAA
AYcECgACDzALBgkqhkiG9w0BAQsDggEBAHRHV0jFr1duyxIE7O4rM++0yO6O+o/P
b6cs+mqp8dvURCOZBC8usNWJGX+t7k3qMiri0qsE2fBJ9WaIRjGdUNjOrMU4ds9d
Bk+BYkTZ1syoE+NoMXmE6fB+aPpqUH2HG5gKS1o8uHyTqXYrkb8mk8AtTomEEwPX
aTyCbR4uQaEDngwsFp/HDJA2LgkWcPyVW+pe2p2n75mHzyYooePp/KTHKMNzmpa3
nt9W4O7XKHn1gGHLTH3LLJBqGlBviNNPT72eE1K44H1ptUO0T/gRZuWvWme3/1dv
rOWT5HqmxSbhj3RG5reWRYp+shO14JH2VM5Ena/xMVZzkudLrl18pGw=
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2DockerCA
---
Acceptable client certificate CA names
/O=Boot2DockerCA
---
SSL handshake has read 1228 bytes and written 146 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: 30F5D5CD8276F7BAADE68E164251359B9D7D8531BA9FF288D2BAF998AF651B161C094D17A2BF9657B03B30278A7FF07F
Key-Arg : None
PSK identity: None
PSK identity hint: None
Start Time: 1443159065
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
@cischmidt , ваш boot2docker
имеет правильные сертификаты (т. е. те, которые сгенерированы процессом по умолчанию в boot2docker
, а _не _ те, сгенерированные docker-machine
). Предполагая, что они соответствуют вашим сертификатам на вашем хосте (вы можете проверить их с помощью openssl x509 -in "${DOCKER_CERT_PATH}/cert.pem" -text
и openssl x509 -in "${DOCKER_CERT_PATH}/ca.pem" -text
), тогда происходит что-то еще, возможно, с вашей маршрутизацией VPN или чем-то еще. Вы также получаете другую ошибку, чем @PavelPolyakov, что заставляет меня думать, что ваша проблема отличается от описанной здесь.
@posita
По какой-то причине описанный вами поток не приводит меня к нужным сертификатам:
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3
docker<strong i="8">@default</strong>:~$ rm -fv ~docker/.docker/*
removed '/home/docker/.docker/ca.pem'
removed '/home/docker/.docker/cert.pem'
removed '/home/docker/.docker/key.pem'
docker<strong i="9">@default</strong>:~$ sudo -i
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3
root<strong i="10">@default</strong>:~# cat /var/lib/boot2docker/profile
EXTRA_ARGS='
--label provider=virtualbox
'
CACERT=/var/lib/boot2docker/ca.pem
DOCKER_HOST='-H tcp://0.0.0.0:2376'
DOCKER_STORAGE=aufs
DOCKER_TLS=auto
SERVERKEY=/var/lib/boot2docker/server-key.pem
SERVERCERT=/var/lib/boot2docker/server.pem
root<strong i="11">@default</strong>:~# rm -fv /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/*
removed '/var/lib/boot2docker/ca.pem'
removed '/var/lib/boot2docker/server-key.pem'
removed '/var/lib/boot2docker/server.pem'
removed '/var/lib/boot2docker/tls/cakey.pem'
removed '/var/lib/boot2docker/tls/cert.pem'
removed '/var/lib/boot2docker/tls/hostnames'
removed '/var/lib/boot2docker/tls/key.pem'
root<strong i="12">@default</strong>:~# /usr/local/etc/init.d/docker restart
Need TLS certs for default,127.0.0.1,10.0.2.15,192.168.99.104
-------------------
Generating CA cert
2015/09/25 20:27:04 Generating a new certificate authority.
rm: can't remove '/var/lib/boot2docker/server.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/server-key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/cert.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls//hostnames': No such file or directory
Generate server cert
/usr/local/bin/generate_cert --host=default,127.0.0.1,10.0.2.15,192.168.99.104 --ca=/var/lib/boot2docker/ca.pem --ca-key=/var/lib/boot2docker/tls/cakey.pem --cert=/var/lib/boot2docker/server.pem --key=/var/lib/boot2docker/server-key.pem --org=Boot2Docker
2015/09/25 20:27:04 Generating a server cert
Generating client cert
2015/09/25 20:27:06 no --host parameters, making a client cert
root<strong i="13">@default</strong>:~# exit
docker<strong i="14">@default</strong>:~$ exit
[~]$ rm -v "${DOCKER_CERT_PATH}"/*.pem
/Users/PavelPolyakov/.docker/machine/certs/ca.pem
/Users/PavelPolyakov/.docker/machine/certs/cert.pem
/Users/PavelPolyakov/.docker/machine/certs/key.pem
[~]$ docker-machine scp default:/home/docker/.docker/\*.pem "${DOCKER_CERT_PATH}"
ca.pem 100% 1050 1.0KB/s 00:00
cert.pem 100% 1070 1.0KB/s 00:00
key.pem 100% 1679 1.6KB/s 00:00
[~]$ docker ps
An error occurred trying to connect: Get https://192.168.99.104:2376/v1.20/containers/json: x509: certificate signed by unknown authority
определенная информация:
[~]$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
CONNECTED(00000003)
depth=0 O = default
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = default
verify error:num=21:unable to verify the first certificate
verify return:1
140735289209680:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:s3_pkt.c:1472:SSL alert number 42
140735289209680:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:656:
---
Certificate chain
0 s:/O=default
i:/O=PavelPolyakov
-----BEGIN CERTIFICATE-----
MIIDADCCAeqgAwIBAgIQR4h88WLsll8AkYK6MIeEMTALBgkqhkiG9w0BAQswGDEW
MBQGA1UEChMNUGF2ZWxQb2x5YWtvdjAeFw0xNTA5MjMxNjMwMDBaFw0xODA5MDcx
NjMwMDBaMBIxEDAOBgNVBAoTB2RlZmF1bHQwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQC7MYqKigy4aJCPiaCQrOKypICUYbIvLYtHKCYG7d9d274MuYWf
dH7mMKTTu8M3GOrAzUj+tvHDAHIZgV0nDMz5qwEkYI2JD7N7hcHQ91JUPJVVpV3e
v2v4hzFra8KB/9h4grjTwAnMLLJNNcWUwu8JPvy3xRmBjpl8UIVY1+VLYwiLodfS
7bWBdqYy2E0sxoJjgtNVPWgxkOloApOrQhq0t/HcyXv0mA3hVPG+9J1r5Mxqs0nY
/qIMKGpywhTGqsWfDnBe22Bf2tFHagDN0frLRrIrF8HT8Xggwawz9pN4RpRWUrI0
lAsgxznXZR1xnvffbxmdy2P94BX1UHqzVy/dAgMBAAGjUDBOMA4GA1UdDwEB/wQE
AwIAqDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIw
ADAPBgNVHREECDAGhwTAqGNoMAsGCSqGSIb3DQEBCwOCAQEAYoGQ5x3wXGVxZey9
dcxyVnBkYSZiInVIeI+bdsKtxKUv7HoXRW1iLyKSeNq8BGQzpfaEPkDtfblcEctz
U0Oj7jS4MlrdzGK1A75Bl8Bo1VDpu146M8cp/Wa09tjmrJktMrVOVZVQteDCPmZo
RIgaHWH0gRJPOy2SCTvLhmyZTK0bO2YKpgvjf2f7NMw6GBJi1hgcZuw3wDjVutjS
2hOWh2HeVyguu1na+YTpZ0csH+MSrKt79ulBpZ3SlYiG5pDFJ5Bjf74OpL0KW30Z
sBA51T1y3Xfyohb27XT28mJLa5Q1cH1PTnComd4K9AlVy7zY0u/MlDN8kaZb0ggX
pqpv2Q==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=default
issuer=/O=PavelPolyakov
---
Acceptable client certificate CA names
/O=PavelPolyakov
Client Certificate Types: RSA sign, ECDSA sign
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1239 bytes and written 1903 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: 33C6C897C3CAFCE41E0BC24728616B2C26DD94D50F25D5D5A730BBE84A72E72355A9C05E41AD60524462FB27FE34FF00
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1443212895
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
Путь правильный:
[~]$ echo $DOCKER_CERT_PATH
/Users/PavelPolyakov/.docker/machine/certs
@PavelPolyakov , что вы получите, выполнив шаги из моего https://github.com/docker/machine/issues/1880#issuecomment -143338960 (т.е. изучив сертификаты на стороне boot2docker
)?
@posita
Извините, я пропустил это, подумал, что вы имеете в виду другой комментарий.
Вот что я получаю:
docker<strong i="8">@default</strong>:~$ export DOCKER_CERT_PATH="${HOME}/.docker" DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://127.0.0.1:2376
docker<strong i="9">@default</strong>:~$ docker ps
An error occurred trying to connect: Get https://127.0.0.1:2376/v1.20/containers/json: x509: certificate is valid for 192.168.99.104, not 127.0.0.1
docker<strong i="10">@default</strong>:~$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}"
-CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key
> .pem" </dev/null
Error opening client certificate private key file /home/docker/.docker/key
.pem
140684102092432:error:02001002:system library:fopen:No such file or directory:bss_file.c:391:fopen('/home/docker/.docker/key
.pem','r')
140684102092432:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:393:
unable to load client certificate private key file
Спасибо @posita , есть ли способ получить дополнительную информацию о том, где возникает ошибка «Ошибка SSL: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c: 581)» в процессе, когда я вызываю docker-compose? Я рад открыть новый билет, чтобы узнать, что происходит на моем компьютере, но я не знаю, какую дополнительную информацию я могу предоставить, чтобы отличить то, что происходит у меня от других.
@PavelPolyakov , проверьте свои команды и внимательно прочтите сообщение об ошибке. Похоже на ошибку копирования / вставки.
@posita
Вы снова правы, извините за мою недостаточную осторожность, вот журнал:
docker<strong i="7">@default</strong>:~$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}"
-CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/
null
CONNECTED(00000003)
depth=0 O = default
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = default
verify error:num=21:unable to verify the first certificate
verify return:1
139747887232656:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:s3_pkt.c:1472:SSL alert number 42
139747887232656:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
Certificate chain
0 s:/O=default
i:/O=PavelPolyakov
-----BEGIN CERTIFICATE-----
MIIDADCCAeqgAwIBAgIQR4h88WLsll8AkYK6MIeEMTALBgkqhkiG9w0BAQswGDEW
MBQGA1UEChMNUGF2ZWxQb2x5YWtvdjAeFw0xNTA5MjMxNjMwMDBaFw0xODA5MDcx
NjMwMDBaMBIxEDAOBgNVBAoTB2RlZmF1bHQwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQC7MYqKigy4aJCPiaCQrOKypICUYbIvLYtHKCYG7d9d274MuYWf
dH7mMKTTu8M3GOrAzUj+tvHDAHIZgV0nDMz5qwEkYI2JD7N7hcHQ91JUPJVVpV3e
v2v4hzFra8KB/9h4grjTwAnMLLJNNcWUwu8JPvy3xRmBjpl8UIVY1+VLYwiLodfS
7bWBdqYy2E0sxoJjgtNVPWgxkOloApOrQhq0t/HcyXv0mA3hVPG+9J1r5Mxqs0nY
/qIMKGpywhTGqsWfDnBe22Bf2tFHagDN0frLRrIrF8HT8Xggwawz9pN4RpRWUrI0
lAsgxznXZR1xnvffbxmdy2P94BX1UHqzVy/dAgMBAAGjUDBOMA4GA1UdDwEB/wQE
AwIAqDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIw
ADAPBgNVHREECDAGhwTAqGNoMAsGCSqGSIb3DQEBCwOCAQEAYoGQ5x3wXGVxZey9
dcxyVnBkYSZiInVIeI+bdsKtxKUv7HoXRW1iLyKSeNq8BGQzpfaEPkDtfblcEctz
U0Oj7jS4MlrdzGK1A75Bl8Bo1VDpu146M8cp/Wa09tjmrJktMrVOVZVQteDCPmZo
RIgaHWH0gRJPOy2SCTvLhmyZTK0bO2YKpgvjf2f7NMw6GBJi1hgcZuw3wDjVutjS
2hOWh2HeVyguu1na+YTpZ0csH+MSrKt79ulBpZ3SlYiG5pDFJ5Bjf74OpL0KW30Z
sBA51T1y3Xfyohb27XT28mJLa5Q1cH1PTnComd4K9AlVy7zY0u/MlDN8kaZb0ggX
pqpv2Q==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=default
issuer=/O=PavelPolyakov
---
Acceptable client certificate CA names
/O=PavelPolyakov
Client Certificate Types: RSA sign, ECDSA sign
Requested Signature Algorithms: RSA+SHA256:ECDSA+SHA256
Shared Requested Signature Algorithms: RSA+SHA256:ECDSA+SHA256
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1247 bytes and written 138 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID:
Session-ID-ctx:
Master-Key: 3C14268CC4FE8700076CAFC6E11AD067C1B691F18B7CD339898E785EBF922DBE787EF82557D13CA82AEEEF29363D4F4F
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1443214121
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
@cischmidt , для отладки материалов SSL, связанных с Docker, попробуйте:
( set -x ; openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -tls1 -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null )
Ожидается, что это приведет к ошибке (вы не предоставили аргумент -cert
), но вы должны увидеть что-то вроде этого ближе к концу вывода:
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: ...
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: ...
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Это означает, что ваш клиент подтвердил, что сертификат сервера в порядке. Если вы хотите проверить, действительно ли ваши сертификаты работают, то простое выполнение docker ps
должно помочь. В качестве альтернативы вы можете:
( set -x ; openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -tls1 -CAfile "${DOCKER_CERT_PATH}/ca.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null )
Вы увидите шестнадцатеричный дамп соединения, но я считаю, что docker ps
проще для глаз. : tired_face:
@PavelPolyakov , посмотри на тему и _not _ сертификаты , сгенерированные boot2docker
. Я подозреваю, что как-то docker-machine
их перезаписывает. Вы когда-нибудь перезагружали свой компьютер?
@ehazlett , в какой момент docker-machine
вмешивается и (повторно) создает сертификаты на boot2docker
?
Нет, я вижу, что это не те предметы, которые мы ищем, но ...
Если я правильно вас понял, тогда, когда мы:
Но даже сразу после этих двух команд:
root<strong i="13">@default</strong>:~# rm -fv /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/*
removed '/var/lib/boot2docker/ca.pem'
removed '/var/lib/boot2docker/server-key.pem'
removed '/var/lib/boot2docker/server.pem'
removed '/var/lib/boot2docker/tls/cakey.pem'
removed '/var/lib/boot2docker/tls/cert.pem'
removed '/var/lib/boot2docker/tls/hostnames'
removed '/var/lib/boot2docker/tls/key.pem'
root<strong i="14">@default</strong>:~# /usr/local/etc/init.d/docker restart
Need TLS certs for default,127.0.0.1,10.0.2.15,192.168.99.104
-------------------
Generating CA cert
2015/09/25 20:58:36 Generating a new certificate authority.
rm: can't remove '/var/lib/boot2docker/server.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/server-key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/cert.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls/key.pem': No such file or directory
rm: can't remove '/var/lib/boot2docker/tls//hostnames': No such file or directory
Generate server cert
/usr/local/bin/generate_cert --host=default,127.0.0.1,10.0.2.15,192.168.99.104 --ca=/var/lib/boot2docker/ca.pem --ca-key=/var/lib/boot2docker/tls/cakey.pem --cert=/var/lib/boot2docker/server.pem --key=/var/lib/boot2docker/server-key.pem --org=Boot2Docker
2015/09/25 20:58:37 Generating a server cert
Generating client cert
2015/09/25 20:58:39 no --host parameters, making a client cert
Сертификаты неверны:
docker<strong i="18">@default</strong>:~$ openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}"
-CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/
null
...
Certificate chain
0 s:/O=default
i:/O=PavelPolyakov
...
Однако настоящие сертификаты свежие и новые, только что сгенерированные:
docker<strong i="22">@default</strong>:~/.docker$ ls -al
total 12
drwx------ 2 docker staff 100 Sep 25 20:58 ./
drwxr-sr-x 5 docker staff 180 Sep 25 18:03 ../
-rw-r--r-- 1 docker staff 1050 Sep 25 20:58 ca.pem
-rw-r--r-- 1 docker staff 1070 Sep 25 20:58 cert.pem
-rw------- 1 docker staff 1675 Sep 25 20:58 key.pem
docker<strong i="23">@default</strong>:~/.docker$ date
Fri Sep 25 21:02:23 UTC 2015
docker<strong i="24">@default</strong>:~/.docker$
@PavelPolyakov , ты понял. Я _ надеялся_, что мы сможем (вручную) заменить то, что я подозреваю, это сертификаты, созданные docker-machine
сертификаты, созданные boot2docker
. Если бы это _работало_ (то есть решило вашу ошибку сертификата), это подтвердило бы мою теорию о проблеме docker-machine
субъект / эмитент.
К сожалению, похоже, что docker-machine
даже не позволит нам зайти так далеко. : confounded: Другими словами, моя теория все еще может быть хорошей, но мы не можем проверить ее таким образом.
Есть еще одна вещь, которую мы можем попробовать: вместо того, чтобы делать /usr/local/etc/init.d/docker restart
, мы можем попробовать:
root<strong i="14">@default</strong>:~# rm -fv ~docker/.docker/*.pem /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/*
...
root<strong i="15">@default</strong>:~# /usr/local/etc/init.d/docker stop
...
root<strong i="16">@default</strong>:~# ps aux | grep -i docker # make sure all the docker processes are dead; kill them by hand if necessary
...
root<strong i="17">@default</strong>:~# /usr/local/etc/init.d/docker start
...
root<strong i="18">@default</strong>:~# export DOCKER_CERT_PATH=/home/docker/.docker DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://127.0.0.1:2376
root<strong i="19">@default</strong>:~# docker ps
...
root<strong i="20">@default</strong>:~# openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
...
Надеюсь, у вас уже есть правильные сертификаты (они у вас уже были однажды , я не знаю, почему вы не можете их сразу воспроизвести). Тогда не выходите из корневой оболочки. Проверьте временные метки ваших сертификатов:
root<strong i="25">@default</strong>:~# ls -al ~docker/.docker/*.pem /var/lib/boot2docker/*.pem /var/lib/boot2docker/tls/*.pem
...
Из _another _ оболочки на хосте выполните:
% eval $( docker-machine env [machine-name] )
% docker ps
...
В случае сбоя проверьте временные метки сертификатов еще раз в корневой оболочке boot2docker
которую вы оставили открытой. Если они не совпадают, то в какой-то момент docker-machine
их переписывает. Если они _do _ совпадают, значит, с вашей настройкой происходит что-то еще, что не учитывается, и я сдаюсь. :расстроен:
Дело в том, что каждый раз, когда мы генерируем сертификаты, они хорошие, и они из boot2docker (как я показал на скриншоте).
Однако эта конкретная команда:
openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
показывает сертификаты с моим именем в теме.
Кроме того, когда я это делаю:
root<strong i="11">@default</strong>:~# docker ps
An error occurred trying to connect: Get https://127.0.0.1:2376/v1.20/containers/json: x509: certificate is valid for 192.168.99.104, not 127.0.0.1
Есть ли в этом смысл - эта разница в IP?
Большое спасибо за все время, которое вы потратили на решение моей проблемы! Я весьма признателен!
С Уважением,
@PavelPolyakov , без проблем. Вы помогаете мне подтвердить теорию (хотя и медленно). : wink:
Однако эта конкретная команда:
openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null
показывает сертификаты с моим именем в теме.
Имеется в виду, когда вы запускаете его со стороны хоста (в OS X) или как на хосте, так и изнутри виртуальной машины? Да, это то, что меня бесит. Я не могу понять, почему это происходит, если все шаги выполняются, как указано. В будущем попробуйте это вместо этого (по крайней мере, это предоставит некоторую дополнительную информацию):
( set -x ; openssl x509 -in "${DOCKER_CERT_PATH}/cert.pem" -text ; openssl x509 -in "${DOCKER_CERT_PATH}/ca.pem" -text ; openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null )
Кроме того, когда я это делаю:
root<strong i="17">@default</strong>:~# docker ps An error occurred trying to connect: Get https://127.0.0.1:2376/v1.20/containers/json: x509: certificate is valid for 192.168.99.104, not 127.0.0.1
Есть ли в этом смысл - эта разница в IP?
О да. Попробуйте это (замените [www.xxx.yyy.zzz]
любым IP-адресом вашей виртуальной машины, т. Е. 192.168.99.104
на момент вашего последнего комментария, но ifconfig
должно быть доступно из boot2docker
если нужно):
root<strong i="26">@default</strong>:~# DOCKER_HOST=[www.xxx.yyy.zzz]:2376 docker ps
Пока помогает любой из танцев :)
Еще одно интересное (или нет), что у меня есть две локации с сертификатами:
Другая интересная вещь заключается в том, что даже после чистой установки докер-машины (без каких-либо манипуляций, описанных выше), когда я делаю следующее (на докер-машине):
docker<strong i="13">@default</strong>:~$ export DOCKER_CERT_PATH="${HOME}/.docker" DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://192.168.99.1
06:2376
docker<strong i="14">@default</strong>:~$ docker ps
The server probably has client authentication (--tlsverify) enabled. Please check your TLS client certification settings: Get https://192.168.99.106:2376/v1.20/containers/json: remote error: bad certificate
У меня все еще есть проблемы с сертификатами.
И в-третьих, после удаления и восстановления сертификатов (при перезапуске).
У меня здесь три сертификата /home/docker/.docker
.
root<strong i="28">@default</strong>:/home/docker/.docker# openssl x509 -noout -in key.pem -text
unable to load certificate
140604952614544:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: TRUSTED CERTIFICATE
Похоже, что-то не так, для первых двух сертификатов работает та же команда.
@PavelPolyakov , сертификаты в /home/docker/.docker
на экземпляре виртуальной машины генерируются boot2docker
. Они копируются в этот каталог как часть процесса (повторного) создания сертификата по умолчанию boot2docker
s. Если docker-machine
затем создает _new_ сертификаты для Docker, я предполагаю, что он не удаляет те из /home/docker/.docker
, которые, вероятно, устарели, поэтому вы получаете сообщение об ошибке при вызове docker ps
на экземпляре виртуальной машины.
Кроме того, openssl x509 -noout -in key.pem -text
не сработает. В key.pem
нет данных X509. Это закрытый ключ. openssl x509 -noout -in cert.pem -text
или openssl x509 -noout -in key.pem -text
должны работать.
Я недостаточно знаю о docker-machine
чтобы понять, почему он поддерживает два отдельных пути сертификатов (например, ~/.docker/machine/certs
и ~/.docker/machine/machines/[machine-name]
). Но даже в этом случае, на основании ваших предыдущих комментариев, независимо от того, какие сертификаты _client_ существуют на хосте, сертификаты _server_ экземпляра виртуальной машины перезаписываются docker-machine
, даже после попытки установить их вручную (в нашем случае через boot2docker
- собственный процесс создания сертификата). (Если мы не можем обойтись без этого, действительно не имеет значения, какие сертификаты существуют на стороне клиента и где.)
Вся моя цель в этом эксперименте состояла в том, чтобы попытаться получить сертификат _server_ на экземпляре виртуальной машины, где его субъект не совпадает с субъектом его эмитента, чтобы увидеть, было ли это причиной ошибки, которая побудила вас зарегистрировать эту проблему. К сожалению, это оказалось очень сложно.
Более простой путь на этом этапе может заключаться в том, что кто-то, разбирающийся в Go, посмотрит на источники docker-machine
, найдет, где он выполняет свою магию генерации сертификатов, настроит его, чтобы гарантировать, что тема в ca.pem
отличается от субъекта в его подписанных сертификатах (например, ca.pem
, server.pem
и т. д.), и создает сборку, которую вы можете протестировать.
@ehazlett , рекомендации?
@PavelPolyakov , я должен спать: tired_face :, но попробуй эту сборку 1 . Сохраните его как docker-machine_darwin-amd64
и убедитесь, что у него есть разрешения на выполнение. НАПРИМЕР:
% curl >~/Desktop/docker-machine_darwin-amd64 --location 'https://www.dropbox.com/s/2leyxf2sy6k0i9o/docker-machine_darwin-amd64'
...
% openssl dgst -r -sha256 ~/Desktop/docker-machine_darwin-amd64
cf3f82323b5f5f3556b0286c2ea3edb51ffe1bccd5fbeecddd59f591486f2089 */.../Desktop/docker-machine_darwin-amd64
% chmod +x ~/Desktop/docker-machine_darwin-amd64
% ~/Desktop/docker-machine_darwin-amd64 create --driver virtualbox fubar
...
% eval $( ~/Desktop/docker-machine_darwin-amd64 env fubar )
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1 Контрольная сумма SHA-256: cf3f82323b5f5f3556b0286c2ea3edb51ffe1bccd5fbeecddd59f591486f2089
.
@posita
Пожалуйста, ложись спать :)
Установлено на машину:
[~]$ curl >~/Desktop/docker-machine_darwin-amd64 --location 'https://www.dropbox.com/s/2leyxf2sy6k0i9o/docker-machine_darwin-amd64'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 486 0 486 0 0 269 0 --:--:-- 0:00:01 --:--:-- 269
100 12.7M 100 12.7M 0 0 1153k 0 0:00:11 0:00:11 --:--:-- 2555k
[~]$ openssl dgst -r -sha256 ~/Desktop/docker-machine_darwin-amd64
cf3f82323b5f5f3556b0286c2ea3edb51ffe1bccd5fbeecddd59f591486f2089 */Users/PavelPolyakov/Desktop/docker-machine_darwin-amd64
[~]$ chmod +x ~/Desktop/docker-machine_darwin-amd64
[~]$ ~/Desktop/docker-machine_darwin-amd64 create --driver virtualbox fubar
Running pre-create checks...
Creating machine...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Provisioning created instance...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
To see how to connect Docker to this machine, run: /Users/PavelPolyakov/Desktop/docker-machine_darwin-amd64 env fubar
[~]$ eval $( ~/Desktop/docker-machine_darwin-amd64 env fubar )
[~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Находясь на машине, имею следующее:
docker<strong i="12">@fubar</strong>:~$ export DOCKER_CERT_PATH="${HOME}/.docker" DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://127.0.0.1
docker<strong i="13">@fubar</strong>:~$ ( set -x ; openssl x509 -in "${DOCKER_CERT_PATH}/cert.pem" -text ; openssl x509 -in "${DOCKER_
CERT_PATH}/ca.pem" -text ; openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -CAfile "${DOCKER_C
ERT_PATH}/ca.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null )
+ openssl x509 -in /home/docker/.docker/cert.pem -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
5a:59:69:9a:b9:cb:c7:fa:b2:23:00:23:22:3a:fc:c2
Signature Algorithm: sha256WithRSAEncryption
Issuer: O=Boot2DockerCA
Validity
Not Before: Sep 26 09:57:59 2015 GMT
Not After : Sep 25 09:57:59 2016 GMT
Subject: O=Boot2Docker
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:ad:e8:2f:36:48:54:2b:a3:19:96:e3:8a:d5:b4:
53:dc:e5:40:43:45:5a:a2:80:89:d5:49:5a:3d:cd:
42:f5:8d:f4:61:19:41:ec:22:af:24:59:da:07:be:
46:f7:79:1d:b9:b7:c4:09:02:5e:7b:f7:6b:eb:bd:
0c:0e:db:d9:24:da:11:7a:bf:96:2c:ac:3c:05:d1:
35:48:6e:86:ad:d0:25:34:3e:1d:30:34:d3:51:df:
be:b9:b6:c4:89:19:96:63:e4:10:ae:59:90:e7:a9:
3c:f3:9e:9a:a0:79:3a:9d:d9:46:b1:d5:a2:58:b2:
ae:84:4b:78:70:f6:54:a0:9d:67:7d:61:91:fb:1b:
9b:a7:f7:6a:ca:b6:f9:f2:23:05:d4:1c:e5:8f:1d:
ff:00:88:2f:b5:ee:a4:68:5c:37:11:7c:6b:c6:0d:
24:70:e2:4e:1b:62:4f:e9:5d:80:d9:02:0c:d7:29:
f1:cb:ae:91:8d:81:4a:0b:6c:f5:c2:be:52:ab:13:
da:01:d2:a2:cc:05:17:76:97:b5:29:c2:c9:6e:34:
c6:47:05:cc:10:29:3e:a5:af:ec:f9:e6:56:4e:03:
10:96:90:42:2f:17:5b:4a:97:11:aa:73:2e:21:f4:
cf:55:3c:93:2a:70:5a:ce:77:55:19:8e:fd:6e:51:
1c:3d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
Signature Algorithm: sha256WithRSAEncryption
4a:53:4d:0a:ff:bd:fc:b7:c3:c6:50:55:48:85:9c:1a:4d:4f:
07:9c:86:bb:d4:58:a4:34:3b:7a:fc:18:16:c6:9e:21:2c:41:
8b:f9:8e:ab:3a:de:09:a0:b7:a5:0e:46:25:4e:5e:c4:47:13:
13:6f:0c:94:1a:9b:bb:86:91:e2:65:f8:c0:08:e4:44:6f:ac:
c2:42:21:54:94:7e:1c:7a:e5:70:e1:f2:00:ac:57:ae:b4:ed:
d9:d2:c4:ce:0d:07:7d:5d:83:0e:17:ef:98:48:ed:29:0d:6b:
d6:9e:c5:14:dd:03:f3:91:eb:4d:b9:07:fe:4a:7e:72:80:f4:
06:b6:36:0e:d9:c7:31:a3:f8:c3:c7:d2:1e:93:ea:ae:93:f1:
75:ac:0d:13:2f:57:b1:3a:58:26:7f:bd:fb:b6:71:b3:60:c9:
7d:98:68:46:81:6b:8f:a8:45:67:06:d1:ec:8d:90:be:36:bb:
0b:94:56:70:b1:45:c0:82:05:6c:b1:9f:cb:18:6d:a0:e4:07:
53:c4:14:19:02:2e:04:5e:27:b4:51:3b:ae:ef:2c:56:31:40:
b1:b1:3c:7f:2e:73:96:0a:13:53:51:ae:5b:a3:5a:91:7c:a9:
ee:3f:1e:c8:03:e8:30:59:07:83:4c:69:51:79:13:c2:d0:31:
d0:04:9e:83
-----BEGIN CERTIFICATE-----
MIIC6TCCAdOgAwIBAgIQWllpmrnLx/qyIwAjIjr8wjALBgkqhkiG9w0BAQswGDEW
MBQGA1UEChMNQm9vdDJEb2NrZXJDQTAeFw0xNTA5MjYwOTU3NTlaFw0xNjA5MjUw
OTU3NTlaMBYxFDASBgNVBAoTC0Jvb3QyRG9ja2VyMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAregvNkhUK6MZluOK1bRT3OVAQ0VaooCJ1UlaPc1C9Y30
YRlB7CKvJFnaB75G93kdubfECQJee/dr670MDtvZJNoRer+WLKw8BdE1SG6GrdAl
ND4dMDTTUd++ubbEiRmWY+QQrlmQ56k8856aoHk6ndlGsdWiWLKuhEt4cPZUoJ1n
fWGR+xubp/dqyrb58iMF1Bzljx3/AIgvte6kaFw3EXxrxg0kcOJOG2JP6V2A2QIM
1ynxy66RjYFKC2z1wr5SqxPaAdKizAUXdpe1KcLJbjTGRwXMECk+pa/s+eZWTgMQ
lpBCLxdbSpcRqnMuIfTPVTyTKnBazndVGY79blEcPQIDAQABozUwMzAOBgNVHQ8B
Af8EBAMCAIAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADALBgkq
hkiG9w0BAQsDggEBAEpTTQr/vfy3w8ZQVUiFnBpNTwechrvUWKQ0O3r8GBbGniEs
QYv5jqs63gmgt6UORiVOXsRHExNvDJQam7uGkeJl+MAI5ERvrMJCIVSUfhx65XDh
8gCsV6607dnSxM4NB31dgw4X75hI7SkNa9aexRTdA/OR6025B/5KfnKA9Aa2Ng7Z
xzGj+MPH0h6T6q6T8XWsDRMvV7E6WCZ/vfu2cbNgyX2YaEaBa4+oRWcG0eyNkL42
uwuUVnCxRcCCBWyxn8sYbaDkB1PEFBkCLgReJ7RRO67vLFYxQLGxPH8uc5YKE1NR
rlujWpF8qe4/HsgD6DBZB4NMaVF5E8LQMdAEnoM=
-----END CERTIFICATE-----
+ openssl x509 -in /home/docker/.docker/ca.pem -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
9b:4f:8c:0f:dc:b5:1d:ad:ec:54:1b:f8:73:ee:67:7a
Signature Algorithm: sha256WithRSAEncryption
Issuer: O=PavelPolyakov
Validity
Not Before: Sep 26 07:47:00 2015 GMT
Not After : Sep 10 07:47:00 2018 GMT
Subject: O=PavelPolyakov
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:e3:3b:a8:23:92:6d:63:59:27:b7:39:e1:7d:4e:
93:57:e2:55:67:51:81:ed:a5:f8:5b:62:e9:e9:e8:
5f:31:63:10:8a:23:c8:1d:97:54:34:02:62:9a:2a:
b9:a1:b8:bc:94:8e:4c:55:f3:8e:00:71:d0:63:1f:
0d:7a:ab:30:a4:62:b7:f6:b2:f8:73:ad:6b:5d:3b:
60:35:a5:14:1d:a1:58:c9:e0:01:e6:03:e5:59:59:
f3:39:c9:4f:21:c8:86:ef:09:e8:ac:25:4b:a6:0f:
f1:d4:85:29:fe:d2:df:cf:95:94:f7:0f:28:00:1f:
c7:f8:29:37:5b:84:e1:0e:c4:88:61:c5:07:60:c8:
1a:a6:97:dd:5c:00:a3:af:35:21:45:8d:02:8e:9d:
6a:c8:81:72:9d:0b:52:4a:99:66:e4:04:96:f3:f7:
29:8f:b5:ed:e3:1a:2f:0c:36:24:42:69:ca:99:f6:
63:4c:d4:19:70:c0:3e:0c:9d:e2:25:be:79:19:ee:
3d:ed:27:49:f9:8f:98:8f:c1:67:74:ea:71:ea:dd:
21:e1:21:f3:a7:a8:35:81:5c:c4:96:2c:be:04:4f:
40:a3:23:e5:d1:1c:7e:f8:8b:c0:0f:81:90:4d:49:
e9:54:4c:13:2f:59:03:c1:12:85:fc:24:68:90:8f:
21:45
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Key Agreement, Certificate Sign
X509v3 Basic Constraints: critical
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
b7:31:60:c6:92:93:59:09:02:dd:2f:a7:de:58:40:a3:c7:32:
dc:ba:94:99:b6:9d:df:b8:8b:f1:a0:0c:d8:dd:e8:d3:83:91:
f8:e8:38:f0:02:8a:9f:e7:73:ec:c4:7b:9b:99:10:63:2d:60:
17:cd:50:dd:00:ce:da:fa:33:2d:fd:f2:40:d7:44:2b:89:a3:
b4:d3:a6:ca:49:3a:7f:1d:50:67:9b:94:e1:1c:29:33:53:04:
f9:cc:1b:76:d3:60:33:a4:c2:e4:d0:aa:c5:e4:e9:d0:64:f4:
39:58:00:fa:ca:1e:83:c8:9c:07:78:f6:a1:50:0b:1c:3e:e1:
29:8a:09:ca:4b:bb:94:5b:5e:1a:f1:13:52:15:43:fe:67:08:
cb:a5:0f:5c:50:5e:aa:10:1f:3f:ca:41:48:79:b2:f3:d4:f7:
95:5b:ee:22:f9:22:2c:9f:c1:5a:2e:82:9b:8d:a2:32:f7:b2:
df:5c:dd:4f:b8:4f:7e:f1:c7:de:33:73:db:8c:36:c0:40:b7:
71:1e:5b:7f:66:e9:b1:67:a4:bb:9f:95:86:53:05:de:dd:89:
4f:9e:8d:3b:4e:f0:25:ee:8f:f3:2a:c2:7a:0d:7a:e1:3b:9c:
72:aa:36:22:a4:c7:27:b7:62:7f:b2:d3:a0:bf:a9:e9:db:12:
ab:35:78:3a
-----BEGIN CERTIFICATE-----
MIIC2jCCAcSgAwIBAgIRAJtPjA/ctR2t7FQb+HPuZ3owCwYJKoZIhvcNAQELMBgx
FjAUBgNVBAoTDVBhdmVsUG9seWFrb3YwHhcNMTUwOTI2MDc0NzAwWhcNMTgwOTEw
MDc0NzAwWjAYMRYwFAYDVQQKEw1QYXZlbFBvbHlha292MIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA4zuoI5JtY1kntznhfU6TV+JVZ1GB7aX4W2Lp6ehf
MWMQiiPIHZdUNAJimiq5obi8lI5MVfOOAHHQYx8NeqswpGK39rL4c61rXTtgNaUU
HaFYyeAB5gPlWVnzOclPIciG7wnorCVLpg/x1IUp/tLfz5WU9w8oAB/H+Ck3W4Th
DsSIYcUHYMgappfdXACjrzUhRY0Cjp1qyIFynQtSSplm5ASW8/cpj7Xt4xovDDYk
QmnKmfZjTNQZcMA+DJ3iJb55Ge497SdJ+Y+Yj8FndOpx6t0h4SHzp6g1gVzEliy+
BE9AoyPl0Rx++IvAD4GQTUnpVEwTL1kDwRKF/CRokI8hRQIDAQABoyMwITAOBgNV
HQ8BAf8EBAMCAKwwDwYDVR0TAQH/BAUwAwEB/zALBgkqhkiG9w0BAQsDggEBALcx
YMaSk1kJAt0vp95YQKPHMty6lJm2nd+4i/GgDNjd6NODkfjoOPACip/nc+zEe5uZ
EGMtYBfNUN0Aztr6My398kDXRCuJo7TTpspJOn8dUGeblOEcKTNTBPnMG3bTYDOk
wuTQqsXk6dBk9DlYAPrKHoPInAd49qFQCxw+4SmKCcpLu5RbXhrxE1IVQ/5nCMul
D1xQXqoQHz/KQUh5svPU95Vb7iL5IiyfwVougpuNojL3st9c3U+4T37xx94zc9uM
NsBAt3EeW39m6bFnpLuflYZTBd7diU+ejTtO8CXuj/MqwnoNeuE7nHKqNiKkxye3
Yn+y06C/qenbEqs1eDo=
-----END CERTIFICATE-----
+ openssl s_client -showcerts -connect 127.0.0.1 -CAfile /home/docker/.docker/ca.pem -key /home/docker/.docker/key.pem
no port defined
usage: s_client args
-host host - use -connect instead
-port port - use -connect instead
-connect host:port - who to connect to (default is localhost:4433)
-verify_host host - check peer certificate matches "host"
-verify_email email - check peer certificate matches "email"
-verify_ip ipaddr - check peer certificate matches "ipaddr"
-verify arg - turn on peer certificate verification
-verify_return_error - return verification errors
-cert arg - certificate file to use, PEM format assumed
-certform arg - certificate format (PEM or DER) PEM default
-key arg - Private key file to use, in cert file if
not specified but cert file is.
-keyform arg - key format (PEM or DER) PEM default
-pass arg - private key file pass phrase source
-CApath arg - PEM format directory of CA's
-CAfile arg - PEM format file of CA's
-no_alt_chains - only ever use the first certificate chain found
-reconnect - Drop and re-make the connection with the same Session-ID
-pause - sleep(1) after each read(2) and write(2) system call
-prexit - print session information even on connection failure
-showcerts - show all certificates in the chain
-debug - extra output
-msg - Show protocol messages
-nbio_test - more ssl protocol testing
-state - print the 'ssl' states
-nbio - Run with non-blocking IO
-crlf - convert LF from terminal into CRLF
-quiet - no s_client output
-ign_eof - ignore input eof (default when -quiet)
-no_ign_eof - don't ignore input eof
-psk_identity arg - PSK identity
-psk arg - PSK in hex (without 0x)
-srpuser user - SRP authentification for 'user'
-srppass arg - password for 'user'
-srp_lateuser - SRP username into second ClientHello message
-srp_moregroups - Tolerate other than the known g N values.
-srp_strength int - minimal length in bits for N (default 1024).
-ssl2 - just use SSLv2
-ssl3 - just use SSLv3
-tls1_2 - just use TLSv1.2
-tls1_1 - just use TLSv1.1
-tls1 - just use TLSv1
-dtls1 - just use DTLSv1
-fallback_scsv - send TLS_FALLBACK_SCSV
-mtu - set the link layer MTU
-no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol
-bugs - Switch on all SSL implementation bug workarounds
-serverpref - Use server's cipher preferences (only SSLv2)
-cipher - preferred cipher to use, use the 'openssl ciphers'
command to see what is available
-starttls prot - use the STARTTLS command before starting TLS
for those protocols that support it, where
'prot' defines which one to assume. Currently,
only "smtp", "pop3", "imap", "ftp" and "xmpp"
are supported.
-engine id - Initialise and use the specified engine
-rand file:file:...
-sess_out arg - file to write SSL session to
-sess_in arg - file to read SSL session from
-servername host - Set TLS extension servername in ClientHello
-tlsextdebug - hex dump of all TLS extensions received
-status - request certificate status from server
-no_ticket - disable use of RFC4507bis session tickets
-serverinfo types - send empty ClientHello extensions (comma-separated numbers)
-nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)
-alpn arg - enable ALPN extension, considering named protocols supported (comma-separated list)
-legacy_renegotiation - enable use of legacy renegotiation (dangerous)
-use_srtp profiles - Offer SRTP key management with a colon-separated profile list
-keymatexport label - Export keying material using label
-keymatexportlen len - Export len bytes of keying material (default 20)
Может, мне чего-то не хватает? Однако я пытаюсь выполнить все, как вы описываете ...
Может, мне чего-то не хватает? Однако я пытаюсь выполнить все, как вы описываете ...
Извините, я не хотел быть неясным. Нет необходимости повторять мой список шагов снова. Ваш docker ps
похоже, работал без ошибки SSL, верно? Попробуйте docker-compose ps
. Если я не ошибаюсь, моя исправленная версия docker-machine
просто решила вашу исходную проблему. Вы можете проверить?
Кроме того, можете ли вы еще раз подтвердить свою версию docker-machine
? (Тот, который вы использовали до исправленной версии.)
Наконец, пытались ли вы когда-нибудь воспроизвести свою ошибку, начав с новой машины, созданной с помощью docker-machine
0.4.0 или 0.4.1?
@PavelPolyakov , извините за то, что пропустил это раньше, но с вашего https://github.com/docker/machine/issues/1880#issuecomment -143314311, если моя теория верна, вы могли бы продолжить без каких-либо ошибок SSL: CERTIFICATE_VERIFY_FAILED
. Ваш субъект / издатель для вашего сертификата, созданного с помощью docker-machine
:
0 s:/O=PavelPolyakov
i:/O=PavelPolyakov
Кому:
0 s:/O=default
i:/O=PavelPolyakov
Я не знаю, когда и почему это произошло, но если бы вы в то время сделали следующее на своем хосте, все должно было работать:
% eval $( docker-machine env default )
% docker ps
...
% docker-compose ps
...
Возможно, поэтому у него сработал https://github.com/docker/machine/issues/1880#issuecomment -142557209 @rkit.
Меня беспокоит, что, возможно, у вас были артефакты из среды или экземпляра докер-машины, которые мешали вашим усилиям? Когда я пытаюсь создать новый экземпляр, используя docker-machine
0.4.1, мои сертификаты соответствуют шаблону s:/O=[machine name]
и i:/O=[user name]
, а не s:/O=[user name]
и i:/O=[user name]
шаблон, который, вероятно, вызывал проблемы.
Опять же, извините, что не заметил этого раньше, но это, вероятно, должно было исправить это для вас. Можешь подтвердить?
Хорошо,
Нет :( Я пробовал раньше.
Если я сделаю:
[~/tmp/microservices-workshop/msworkshop/step4]$ eval $( ~/Desktop/docker-machine_darwin-amd64 env fubar )
[~/tmp/microservices-workshop/msworkshop/step4]$ docker ps *[master]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose build *[master]
Building frontend...
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
[~/tmp/microservices-workshop/msworkshop/step4]$ ~/Desktop/docker-machine_darwin-amd64 --version *[master]
docker-machine_darwin-amd64 version 0.5.0-dev (c4cd238)
У меня работает docker ps, но он у меня работал и раньше (при использовании потока инструментов docker по умолчанию с веб-сайта).
Ага. : confounded: Ладно, тогда у меня заканчиваются идеи. Попробуйте сохранить следующее как compose-debug.py
:
import logging
import re
import sys
from compose.cli.main import main
if __name__ == '__main__':
logging.basicConfig(format='%(levelname)-8s: %(message)s')
logging.getLogger().setLevel(logging.DEBUG)
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Затем сделайте:
python compose-debug.py --verbose build
Мы здесь:
[~/tmp/microservices-workshop/msworkshop/step4]$ python compose-debug.py --verbose build *[master]
Traceback (most recent call last):
File "compose-debug.py", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 39, in main
command.sys_dispatch()
File "/usr/local/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 21, in sys_dispatch
self.dispatch(sys.argv[1:], None)
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 27, in dispatch
super(Command, self).dispatch(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 24, in dispatch
self.perform_command(*self.parse(argv, global_options))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 57, in perform_command
verbose=options.get('--verbose'))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 79, in get_project
self.get_client(verbose=verbose))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 64, in get_client
version_info = six.iteritems(client.version())
File "/usr/local/lib/python2.7/site-packages/docker/client.py", line 837, in version
return self._result(self._get(url), json=True)
File "/usr/local/lib/python2.7/site-packages/docker/clientbase.py", line 86, in _get
return self.get(url, **self._set_request_timeout(kwargs))
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 477, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 370, in send
timeout=timeout
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
body=body, headers=headers)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 344, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 314, in _raise_timeout
if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6
TypeError: __str__ returned non-string (type Error)
[~/tmp/microservices-workshop/msworkshop/step4]$ python --version *[master]
Python 2.7.10
@PavelPolyakov , docker-machine
запущен, прежде чем использовать указанную выше команду?
Кроме того, при публикации отладочных данных с трассировками стека полезно, если вы можете заключить их в теги, чтобы сохранить форматирование.
да, машина встала, я могу (если есть доказательства).
docker-machine ssh default
Вот другой вариант (когда я пропускаю --verbose
результат немного отличается):
[~/tmp/microservices-workshop/msworkshop/step4]$ python compose-debug.py build *[master]
INFO : Building frontend...
Building frontend...
Traceback (most recent call last):
File "compose-debug.py", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 39, in main
command.sys_dispatch()
File "/usr/local/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 21, in sys_dispatch
self.dispatch(sys.argv[1:], None)
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 27, in dispatch
super(Command, self).dispatch(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 24, in dispatch
self.perform_command(*self.parse(argv, global_options))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 59, in perform_command
handler(project, command_options)
File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 135, in build
project.build(service_names=options['SERVICE'], no_cache=no_cache)
File "/usr/local/lib/python2.7/site-packages/compose/project.py", line 233, in build
service.build(no_cache)
File "/usr/local/lib/python2.7/site-packages/compose/service.py", line 710, in build
dockerfile=self.options.get('dockerfile', None),
File "/usr/local/lib/python2.7/site-packages/docker/client.py", line 158, in build
timeout=timeout,
File "/usr/local/lib/python2.7/site-packages/docker/clientbase.py", line 83, in _post
return self.post(url, **self._set_request_timeout(kwargs))
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 508, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 370, in send
timeout=timeout
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
body=body, headers=headers)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 344, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 314, in _raise_timeout
if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6
TypeError: __str__ returned non-string (type Error)
Конечно, я использую форматирование, в прошлый раз это была опечатка '' - и я начал ту же строку, извините.
@posita
Я знаю, что вы устали решать эту проблему, и я тоже :) Не знаю, почему моя текущая установка проклята. Возможно, действительно дело в моей конкретной установке ОС и в том, как здесь установлено другое программное обеспечение (варево). Жалко - потратить так много времени на решение проблемы, которая появляется только на моей машине.
Мой дальнейший долгосрочный план - попробовать установить новую OSX, когда она выйдет, или даже установить OSX с нуля и надеяться, что поток по умолчанию сработает.
Трассировки стека мне кажутся странными (они не похожи на ошибки SSL). Что вы получите за docker-compose --verbose build
?
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose build *[master]
Building frontend...
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose --verbose build *[master]
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
Что вы получаете с docker-compose --verbose ps
и python compose-debug.py --verbose ps
? Вот что я получаю:
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
% docker-compose --verbose ps
Compose version 1.4.1
Docker base_url: https://www.xxx.yyy.zzz:2376
Docker version: KernelVersion=4.0.9-boot2docker, Os=linux, BuildTime=Thu Sep 10 19:10:10 UTC 2015, ApiVersion=1.20, Version=1.8.2, GitCommit=0a8c2e3, Arch=amd64, GoVersion=go1.4.2
docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=...', u'com.docker.compose.oneoff=False']})
docker containers -> (list with 0 items)
docker containers <- (all=True)
docker containers -> (list with 0 items)
docker containers <- (all=False, filters={u'label': [u'com.docker.compose.project=...', u'com.docker.compose.oneoff=True']})
docker containers -> (list with 0 items)
docker containers <- (all=True)
docker containers -> (list with 0 items)
Name Command State Ports
------------------------------
% python compose-debug.py --verbose ps
DEBUG : Trying /.../.docker/config.json
DEBUG : File doesn't exist
DEBUG : Trying /.../.dockercfg
DEBUG : Attempting to parse as JSON
DEBUG : ...
INFO : Compose version 1.4.1
Compose version 1.4.1
INFO : Docker base_url: https://www.xxx.yyy.zzz:2376
Docker base_url: https://www.xxx.yyy.zzz:2376
INFO : Docker version: KernelVersion=4.0.9-boot2docker, Os=linux, BuildTime=Thu Sep 10 19:10:10 UTC 2015, ApiVersion=1.20, Version=1.8.2, GitCommit=0a8c2e3, Arch=amd64, GoVersion=go1.4.2
Docker version: KernelVersion=4.0.9-boot2docker, Os=linux, BuildTime=Thu Sep 10 19:10:10 UTC 2015, ApiVersion=1.20, Version=1.8.2, GitCommit=0a8c2e3, Arch=amd64, GoVersion=go1.4.2
INFO : docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=...', u'com.docker.compose.oneoff=False']})
docker containers <- (all=True, filters={u'label': [u'com.docker.compose.project=...', u'com.docker.compose.oneoff=False']})
INFO : docker containers -> (list with 0 items)
docker containers -> (list with 0 items)
INFO : docker containers <- (all=True)
docker containers <- (all=True)
INFO : docker containers -> (list with 0 items)
docker containers -> (list with 0 items)
INFO : docker containers <- (all=False, filters={u'label': [u'com.docker.compose.project=...', u'com.docker.compose.oneoff=True']})
docker containers <- (all=False, filters={u'label': [u'com.docker.compose.project=...', u'com.docker.compose.oneoff=True']})
INFO : docker containers -> (list with 0 items)
docker containers -> (list with 0 items)
INFO : docker containers <- (all=True)
docker containers <- (all=True)
INFO : docker containers -> (list with 0 items)
docker containers -> (list with 0 items)
Name Command State Ports
------------------------------
@posita
Вот что у меня есть:
[~/tmp/microservices-workshop/msworkshop/step4]$ docker ps *[master]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[~/tmp/microservices-workshop/msworkshop/step4]$ docker --verbose ps *[master]
flag provided but not defined: --verbose
See 'docker --help'.
[~/tmp/microservices-workshop/msworkshop/step4]$ python compose-debug.py --verbose ps *[master]
Traceback (most recent call last):
File "compose-debug.py", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/site-packages/compose/cli/main.py", line 39, in main
command.sys_dispatch()
File "/usr/local/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 21, in sys_dispatch
self.dispatch(sys.argv[1:], None)
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 27, in dispatch
super(Command, self).dispatch(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 24, in dispatch
self.perform_command(*self.parse(argv, global_options))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 57, in perform_command
verbose=options.get('--verbose'))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 79, in get_project
self.get_client(verbose=verbose))
File "/usr/local/lib/python2.7/site-packages/compose/cli/command.py", line 64, in get_client
version_info = six.iteritems(client.version())
File "/usr/local/lib/python2.7/site-packages/docker/client.py", line 837, in version
return self._result(self._get(url), json=True)
File "/usr/local/lib/python2.7/site-packages/docker/clientbase.py", line 86, in _get
return self.get(url, **self._set_request_timeout(kwargs))
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 477, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 370, in send
timeout=timeout
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
body=body, headers=headers)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 344, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 314, in _raise_timeout
if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6
TypeError: __str__ returned non-string (type Error)
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose --verbose ps *[master]
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
[~/tmp/microservices-workshop/msworkshop/step4]$ python -V *[master]
Python 2.7.10
Как вы думаете, проблема в моем питоне?
Какая у тебя версия?
Я также обнаружил эту проблему:
https://github.com/kennethreitz/requests/issues/2524
Что касается библиотеки https и ulr, которую использует python, я не знаю, использует ли docker-compose ту же библиотеку.
@PavelPolyakov , попробуйте docker-compose --verbose ps
, а не docker --verbose ps
.
Я сомневаюсь, что это версия Python. Я тоже использую 2.7.10. Это может быть вещь docker-py
? Попробуйте python -c 'import docker ; print(docker.version)'
.
Какая у вас версия OpenSSL?
which openssl
openssl version
which python
python -c 'import ssl ; print(ssl.__file__) ; print(ssl.OPENSSL_VERSION)'
Мы здесь:
[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose --verbose ps *[master]
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
[~/tmp/microservices-workshop/msworkshop/step4]$ python -c 'import docker ; print(docker.version)' *[master]
1.3.1
[~/tmp/microservices-workshop/msworkshop/step4]$ which openssl *[master]
/usr/local/bin/openssl
[~/tmp/microservices-workshop/msworkshop/step4]$ openssl version *[master]
OpenSSL 1.0.2d 9 Jul 2015
[~/tmp/microservices-workshop/msworkshop/step4]$ which python *[master]
/usr/local/bin/python
[~/tmp/microservices-workshop/msworkshop/step4]$ python -c 'import ssl ; print(ssl.__file__) ; print(ssl.OPENSSL_VERSION)'
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.pyc
OpenSSL 1.0.2d 9 Jul 2015
Как docker-py
устанавливается на ваш компьютер? Как вы обновили (если обновили) docker-compose
до последней версии?
В настоящее время вся установка выполняется отсюда: https://www.docker.com/toolbox .
Я не обновлял docker-compose
.
Я также пробовал другую установку - от brew
(те же результаты, ошибка SSL), но тот, с которым мы экспериментируем, находится из пакета инструментов панели инструментов.
Хорошо, ваши версии не сильно отличаются от моих, за исключением docker-py
(я не знаю о requests
):
% docker version --format='{{.Client.Version}}'
1.8.2
% docker-machine --version
docker-machine version 0.4.1 (e2c88d6)
% docker-compose --version
docker-compose version: 1.4.1
% openssl version
OpenSSL 1.0.2d 9 Jul 2015
% python -c 'import ssl ; print(ssl.OPENSSL_VERSION)' # just to make sure it's picking up the same version
OpenSSL 1.0.2d 9 Jul 2015
% python -c 'import docker ; print(docker.version)'
1.4.0
% python -c 'import requests.packages.urllib3 ; print(requests.__version__) ; print(requests.packages.urllib3.__version__)'
2.6.2
1.10.3
Вы пробовали установить / запустить docker-compose
из виртуальной среды (это действительно должно было быть нашим первым шагом: разочарован :)?
% virtualenv .venv
...
% . ./.venv/bin/activate # don't forget the dot; you're "sourcing" the file
% ./.venv/bin/pip install docker-compose
...
% rehash # necessary on some shells like zsh
% which docker-compose
.../.venv/bin/docker-compose
% docker-compose --version
docker-compose version: 1.4.2
% python -c 'import docker ; print(docker.version)'
1.4.0
% python -c 'import requests.packages.urllib3 ; print(requests.__version__) ; print(requests.packages.urllib3.__version__)'
2.7.0
1.10.4
% docker-compose --verbose ps
...?
% python compose-debug.py --verbose ps
...?
% docker-compose build
...?
Такой же:
[~/tmp/microservices-workshop/msworkshop/step4]$ virtualenv .venv *[master]
New python executable in .venv/bin/python
Installing setuptools, pip, wheel...done.
[~/tmp/microservices-workshop/msworkshop/step4]$ . ./.venv/bin/activate *[master]
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ ./.venv/bin/pip install docker-compose *[master]
Collecting docker-compose
Downloading docker-compose-1.4.2.tar.gz (82kB)
100% |████████████████████████████████| 86kB 2.2MB/s
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Downloading docopt-0.6.2.tar.gz
Collecting PyYAML<4,>=3.10 (from docker-compose)
Downloading PyYAML-3.11.tar.gz (248kB)
100% |████████████████████████████████| 249kB 1.4MB/s
Collecting requests<2.7,>=2.6.1 (from docker-compose)
Downloading requests-2.6.2-py2.py3-none-any.whl (470kB)
100% |████████████████████████████████| 471kB 839kB/s
Collecting texttable<0.9,>=0.8.1 (from docker-compose)
Downloading texttable-0.8.3.tar.gz
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
Downloading websocket_client-0.32.0.tar.gz (192kB)
100% |████████████████████████████████| 192kB 1.0MB/s
Collecting docker-py<1.4,>=1.3.1 (from docker-compose)
Downloading docker-py-1.3.1.tar.gz (49kB)
100% |████████████████████████████████| 53kB 3.7MB/s
Collecting dockerpty<0.4,>=0.3.4 (from docker-compose)
Downloading dockerpty-0.3.4.tar.gz
Collecting six<2,>=1.3.0 (from docker-compose)
Downloading six-1.9.0-py2.py3-none-any.whl
Building wheels for collected packages: docker-compose, docopt, PyYAML, texttable, websocket-client, docker-py, dockerpty
Running setup.py bdist_wheel for docker-compose
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/85/15/68/da301b79c711f2eb9a2065f44f16dcef736862e9c334bf87c4
Running setup.py bdist_wheel for docopt
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/0d/5c/a7/cb986749520c1950217b5d8405def5c18541322dbc411a80d1
Running setup.py bdist_wheel for PyYAML
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/fa/db/f6/dee55793d344f1706dc4a5a693298f0115241d1085cc212364
Running setup.py bdist_wheel for texttable
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/d6/44/0b/20a20bc6ab19b4a7f4a43fa67010cf5008140d8abab61d58d5
Running setup.py bdist_wheel for websocket-client
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/48/45/ba/e955834950f99f1ca7a5778808d7bef1d4962edb1a4b14600a
Running setup.py bdist_wheel for docker-py
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/18/b4/cb/62ce0b04a3055cf5d599f3cfd01213d8488e9b367fb9cfb238
Running setup.py bdist_wheel for dockerpty
Stored in directory: /Users/PavelPolyakov/Library/Caches/pip/wheels/52/29/66/0c53de7d30b0e2a838ba252f6db929e9cc3d528892e7d759d5
Successfully built docker-compose docopt PyYAML texttable websocket-client docker-py dockerpty
Installing collected packages: docopt, PyYAML, requests, texttable, six, websocket-client, docker-py, dockerpty, docker-compose
Successfully installed PyYAML-3.11 docker-compose-1.4.2 docker-py-1.3.1 dockerpty-0.3.4 docopt-0.6.2 requests-2.6.2 six-1.9.0 texttable-0.8.3 websocket-client-0.32.0
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ rehash *[master]
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ which docker-compose *[master]
/Users/PavelPolyakov/tmp/microservices-workshop/msworkshop/step4/.venv/bin/docker-compose
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose --version *[master]
docker-compose version: 1.4.2
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ python -c 'import docker ; print(docker.version)'
1.3.1
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ python -c 'import requests.packages.urllib3 ; print(requests.__version__) ; print(requests.packages.urllib3.__version__)'
2.6.2
1.10.3
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose --verbose ps *[master]
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ python compose-debug.py --verbose ps *[master]
ERROR : SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
(.venv)[~/tmp/microservices-workshop/msworkshop/step4]$ docker-compose build *[master]
Building frontend...
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
У вас почему-то все версии выше моей (если я правильно понял):
Почему? и могло ли это иметь такой драматический эффект?
У вас почему-то все версии выше моей (если я правильно понял): ... почему?
Я не уверен. Попробуйте deactivate
обработать свой virtualenv, удалить его и воссоздать, но вместо этого используйте ./.venv/bin/pip install --no-cache-dir docker-compose
(обратите внимание на добавление --no-cache-dir
).
... и могло ли это иметь такой драматический эффект?
Видимо да. По крайней мере, вы получаете ту же загадочную ошибку для python compose-debug.py --verbose ps
что и docker-compose --verbose ps
(вместо трассировки стека, которую вы получали раньше). Так что допишите это до requests
, я думаю.
К вашему сведению, это то, что я получил из моего virtualenv (и свежего каталога ~/.docker/machine
):
% deactivate
% rm -frv ./.venv
...
% for i in $( docker-machine ls --quiet ) ; do docker-machine stop "${i}" ; done
...
% docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
% mv -v ~/.docker/machine ~/.docker/machine.bak
/.../.docker/machine -> /.../.docker/machine.bak
% docker-machine create --driver virtualbox testes
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env testes
docker-machine create --driver virtualbox testes 8.12s user 6.22s system 13% cpu 1:47.48 total
% docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
testes virtualbox Running tcp://192.168.99.100:2376
% eval $( docker-machine env testes )
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
% virtualenv .venv
...
% . ./.venv/bin/activate
% ./.venv/bin/pip install --no-cache-dir docker-compose
...
% rehash
% cat Dockerfile
FROM debian:stable
% cat docker-compose.yml
deb1:
build: .
deb2:
image: debian:stable
links:
- deb1
% docker-compose ps
Name Command State Ports
------------------------------
% docker-compose --verbose build
Compose version 1.4.2
Docker base_url: https://192.168.99.100:2376
Docker version: KernelVersion=4.0.9-boot2docker, Os=linux, BuildTime=Thu Sep 10 19:10:10 UTC 2015, ApiVersion=1.20, Version=1.8.2, GitCommit=0a8c2e3, Arch=amd64, GoVersion=go1.4.2
Building deb1...
docker build <- (pull=False, stream=True, nocache=False, tag=u'test_deb1', rm=True, path='/...', dockerfile=None)
docker build -> <generator object _stream_helper at 0x10f29b5f0>
Step 0 : FROM debian:stable
stable: Pulling from library/debian
401015d2a1e5: Pull complete
315baabd82d5: Pull complete
library/debian:stable: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:2ee35f51e54da93075fe46631a28d84ef4e23eb4ca51e7a8ef9f9ba625e7f6be
Status: Downloaded newer image for debian:stable
---> 315baabd82d5
Successfully built 315baabd82d5
docker close <- ()
docker close -> None
deb2 uses an image, skipping
Нет :(
... steps above were done as well ...
[~/tmp/docker-compose-fixing]$ for i in $( docker-machine ls --quiet ) ; do docker-machine stop "${i}" ; done
[~/tmp/docker-compose-fixing]$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
testes virtualbox Stopped
[~/tmp/docker-compose-fixing]$ mv -v ~/.docker/machine ~/.docker/machine.bak
/Users/PavelPolyakov/.docker/machine -> /Users/PavelPolyakov/.docker/machine.bak/machine
[~/tmp/docker-compose-fixing]$ docker-machine create --driver virtualbox testes
Creating CA: /Users/PavelPolyakov/.docker/machine/certs/ca.pem
Creating client certificate: /Users/PavelPolyakov/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /Users/PavelPolyakov/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.8.2/boot2docker.iso to /Users/PavelPolyakov/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Error creating machine: exit status 1
You will want to check the provider to make sure the machine and associated resources were properly removed.
[~/tmp/docker-compose-fixing]$ docker-machine create --driver virtualbox testes
Creating CA: /Users/PavelPolyakov/.docker/machine/certs/ca.pem
Creating client certificate: /Users/PavelPolyakov/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /Users/PavelPolyakov/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.8.2/boot2docker.iso to /Users/PavelPolyakov/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env testes
[~/tmp/docker-compose-fixing]$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
testes virtualbox Running tcp://192.168.99.109:2376
[~/tmp/docker-compose-fixing]$ eval $( docker-machine env testes )
[~/tmp/docker-compose-fixing]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[~/tmp/docker-compose-fixing]$ virtualenv .venv
New python executable in .venv/bin/python
Installing setuptools, pip, wheel...done.
[~/tmp/docker-compose-fixing]$ . ./.venv/bin/activate
(.venv)[~/tmp/docker-compose-fixing]$ ./.venv/bin/pip install --no-cache-dir docker-compose
Collecting docker-compose
Downloading docker-compose-1.4.2.tar.gz (82kB)
100% |████████████████████████████████| 86kB 16.0MB/s
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Downloading docopt-0.6.2.tar.gz
Collecting PyYAML<4,>=3.10 (from docker-compose)
Downloading PyYAML-3.11.tar.gz (248kB)
100% |████████████████████████████████| 249kB 2.7MB/s
Collecting requests<2.7,>=2.6.1 (from docker-compose)
Downloading requests-2.6.2-py2.py3-none-any.whl (470kB)
100% |████████████████████████████████| 471kB 15.5MB/s
Collecting texttable<0.9,>=0.8.1 (from docker-compose)
Downloading texttable-0.8.3.tar.gz
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
Downloading websocket_client-0.32.0.tar.gz (192kB)
100% |████████████████████████████████| 192kB 20.1MB/s
Collecting docker-py<1.4,>=1.3.1 (from docker-compose)
Downloading docker-py-1.3.1.tar.gz (49kB)
100% |████████████████████████████████| 53kB 10.5MB/s
Collecting dockerpty<0.4,>=0.3.4 (from docker-compose)
Downloading dockerpty-0.3.4.tar.gz
Collecting six<2,>=1.3.0 (from docker-compose)
Downloading six-1.9.0-py2.py3-none-any.whl
Installing collected packages: docopt, PyYAML, requests, texttable, six, websocket-client, docker-py, dockerpty, docker-compose
Running setup.py install for docopt
Running setup.py install for PyYAML
Running setup.py install for texttable
Running setup.py install for websocket-client
Running setup.py install for docker-py
Running setup.py install for dockerpty
Running setup.py install for docker-compose
Successfully installed PyYAML-3.11 docker-compose-1.4.2 docker-py-1.3.1 dockerpty-0.3.4 docopt-0.6.2 requests-2.6.2 six-1.9.0 texttable-0.8.3 websocket-client-0.32.0
(.venv)[~/tmp/docker-compose-fixing]$ rehash
(.venv)[~/tmp/docker-compose-fixing]$ cat Dockerfile
FROM debian:stable
(.venv)[~/tmp/docker-compose-fixing]$ cat docker-compose.yml
deb1:
build: .
deb2:
image: debian:stable
links:
- deb1
(.venv)[~/tmp/docker-compose-fixing]$ docker-compose ps
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
Однако версии библиотеки в основном такие же:
(.venv)[~/tmp/docker-compose-fixing]$ python -c 'import requests.packages.urllib3 ; print(requests.__version__) ; print(requests.packages.urllib3.__version__)'
2.6.2
1.10.3
(.venv)[~/tmp/docker-compose-fixing]$ python -c 'import docker ; print(docker.version)'
1.3.1
Однако версии библиотеки в основном такие же:
(.venv)[~/tmp/docker-compose-fixing]$ python -c 'import requests.packages.urllib3 ; print(requests.__version__) ; print(requests.packages.urllib3.__version__)' 2.6.2 1.10.3 (.venv)[~/tmp/docker-compose-fixing]$ python -c 'import docker ; print(docker.version)' 1.3.1
Ой ... ты прав. Это моя вина (путала терминалы). Я (по ошибке) частично копировал номера версий со своего терминала, где я сделал что-то вроде pip install --upgrade ...
). : weary: В моей рабочей среде у меня такие же, как у вас:
% which python
.../.venv/bin/python
% python -c 'import docker ; print(docker.version)'
1.3.1
% python -c 'import requests.packages.urllib3 ; print(requests.__version__) ; print(requests.packages.urllib3.__version__)'
2.6.2
1.10.3
Что вы получите за это в вашей текущей среде?
( set -x ; openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -tls1 -CAfile "${DOCKER_CERT_PATH}/ca.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null ; echo "exit code: ${?}" ) | awk '$0 ~ /TLS session ticket:/ { ticket = 1; } !ticket || $1 !~ /^[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]$/ { print; }'
Также можно попробовать это (исправлено)?
% deactivate
% virtualenv -p /usr/bin/python .venv2
...
% ./.venv2/bin/pip install --no-cache-dir docker-compose
% ./.venv2/bin/python -c 'import ssl ; print(ssl.__file__) ; print (ssl.OPENSSL_VERSION)'
...
% ./.venv2/bin/python -c 'import _ssl ; print(_ssl.__file__) ; print (_ssl.OPENSSL_VERSION)' # note the underscore-ssl
...
% ./.venv2/bin/docker-compose ps
...
1-й:
(.venv)[~/tmp/docker-compose-fixing]$ ( set -x ; openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -tls1 -CAfile "${DOCKER_CERT_PATH}/ca.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -key "${DOCKER_CERT_PATH}/key.pem" </dev/null ; echo "exit code: ${?}" ) | awk '$0 ~ /TLS session ticket:/ { ticket = 1; } !ticket || $1 !~ /^[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]$/ { print; }'
+-zsh:111> openssl s_client -showcerts -connect 192.168.99.109:2376 -tls1 -CAfile /Users/PavelPolyakov/.docker/machine/machines/testes/ca.pem -cert /Users/PavelPolyakov/.docker/machine/machines/testes/cert.pem -key /Users/PavelPolyakov/.docker/machine/machines/testes/key.pem
depth=1 O = PavelPolyakov
verify return:1
depth=0 O = testes
verify return:1
DONE
CONNECTED(00000003)
---
Certificate chain
0 s:/O=testes
i:/O=PavelPolyakov
-----BEGIN CERTIFICATE-----
MIIC/zCCAemgAwIBAgIQHxlNz0mEt4afcgoccLhiGzALBgkqhkiG9w0BAQswGDEW
MBQGA1UEChMNUGF2ZWxQb2x5YWtvdjAeFw0xNTA5MjcxODE2MDBaFw0xODA5MTEx
ODE2MDBaMBExDzANBgNVBAoTBnRlc3RlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAOhSHinVHHH9BjwuGyNwMPlvyLQvJHngyUqbRx5L+NaOL6lTGinr
vXG+xosolY8TuTdTd9LZu25ccQMQ3AbwVV0XNklkqxUc1cQma9pZ/9VsmfOlHl+n
HkgFrJIhiV+GpsjbXy/oNiwkuNGIu0/DByPbf7NWVoTKMOUKyJBFQnqWE9VWLXA/
4BVnl/8VOFnCdGCqx8EkJEk0RC4h8No76M0Z/t32w2wj1Cj8BFzO5slGwwcFuOTt
TQNfOyicxg/KUPeeLEr0st9WenBOE90lzozecqeBLLEwUcpFFFdNrC79Gy4W9YEd
f60kNsAxFxlvKLg5svxNJPwBmiA2mam54GkCAwEAAaNQME4wDgYDVR0PAQH/BAQD
AgCoMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA
MA8GA1UdEQQIMAaHBMCoY20wCwYJKoZIhvcNAQELA4IBAQCfOH1AxRjw+ZDS04S8
ne+uUwk7KW5Ws2lZELAzedB9Izz/QOUyN89GGSttPrlUP0YOmMbwXOqFyMVuqx7e
WEGcGH1dduCbvP7SELBPYrocvAEQPWLqyA5W7uRiJA9KipRe2r5bVer1bvADt6Ir
UuNpoqYWM5fG+X0LT3PbNCEaxC8Itzb4KnVVCHrE+Me931uvOahLWrcisM6eQEYS
asDytbK9KvKM86TVEkyWFEAzTc4VWCLeK3JTy6Tfi+86Yqvk0TTaoh1X6hjKnfWY
5xT7SOL6DsNBZHDAUG0W/2FDR8EYfOmKoDW4PH5F7Qyamd0fcgMBrwZ/uMqhXHAd
vIsF
-----END CERTIFICATE-----
---
Server certificate
subject=/O=testes
issuer=/O=PavelPolyakov
---
Acceptable client certificate CA names
/O=PavelPolyakov
Client Certificate Types: RSA sign, ECDSA sign
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2165 bytes and written 1378 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID: 9329F3198FC79ACBDF2CAB18200C02B19F9AFD84AF4462C7044878A6A16BF257
Session-ID-ctx:
Master-Key: 52FFF668D11FCE75BADCA40CAFB7F016B888E975D87E2010EAC9ADE5CC0EEB5B562074D822D7306991E149BC2DCA83E6
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket:
Start Time: 1443381037
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
+-zsh:111> echo 'exit code: 0'
exit code: 0
и 2-й:
(.venv)[~/tmp/docker-compose-fixing]$ deactivate
[~/tmp/docker-compose-fixing]$ virtualenv -p /usr/bin/python .venv2
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in .venv2/bin/python
Installing setuptools, pip, wheel...done.
[~/tmp/docker-compose-fixing]$ ./.venv2/bin/pip install --no-cache-dir docker-compose
Collecting docker-compose
Downloading docker-compose-1.4.2.tar.gz (82kB)
100% |████████████████████████████████| 86kB 1.9MB/s
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Downloading docopt-0.6.2.tar.gz
Collecting PyYAML<4,>=3.10 (from docker-compose)
Downloading PyYAML-3.11.tar.gz (248kB)
100% |████████████████████████████████| 249kB 2.6MB/s
Collecting requests<2.7,>=2.6.1 (from docker-compose)
Downloading requests-2.6.2-py2.py3-none-any.whl (470kB)
100% |████████████████████████████████| 471kB 11.1MB/s
Collecting texttable<0.9,>=0.8.1 (from docker-compose)
Downloading texttable-0.8.3.tar.gz
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
Downloading websocket_client-0.32.0.tar.gz (192kB)
100% |████████████████████████████████| 192kB 12.5MB/s
Collecting docker-py<1.4,>=1.3.1 (from docker-compose)
Downloading docker-py-1.3.1.tar.gz (49kB)
100% |████████████████████████████████| 53kB 12.5MB/s
Collecting dockerpty<0.4,>=0.3.4 (from docker-compose)
Downloading dockerpty-0.3.4.tar.gz
Collecting six<2,>=1.3.0 (from docker-compose)
Downloading six-1.9.0-py2.py3-none-any.whl
Installing collected packages: docopt, PyYAML, requests, texttable, six, websocket-client, docker-py, dockerpty, docker-compose
Running setup.py install for docopt
Running setup.py install for PyYAML
Running setup.py install for texttable
Running setup.py install for websocket-client
Running setup.py install for docker-py
Running setup.py install for dockerpty
Running setup.py install for docker-compose
Successfully installed PyYAML-3.11 docker-compose-1.4.2 docker-py-1.3.1 dockerpty-0.3.4 docopt-0.6.2 requests-2.6.2 six-1.9.0 texttable-0.8.3 websocket-client-0.32.0
[~/tmp/docker-compose-fixing]$ ./.venv/bin/python -c 'import ssl ; print(ssl.__file__) ; print (ssl.OPENSSL_VERSION)'
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.pyc
OpenSSL 0.9.8zg 14 July 2015
[~/tmp/docker-compose-fixing]$ ./.venv2/bin/python -c 'import _ssl ; print(_ssl.__file__) ; print (_ssl.OPENSSL_VERSION)'
/Users/PavelPolyakov/tmp/docker-compose-fixing/.venv2/lib/python2.7/lib-dynload/_ssl.so
OpenSSL 0.9.8zg 14 July 2015
[~/tmp/docker-compose-fixing]$ ./.venv2/bin/docker-compose ps
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
Хорошо, у меня официально закончились идеи. Я не могу понять, почему openssl s_client
может работать, _and_ docker ps
может работать, но вы все еще получаете ошибки проверки сертификата SSL с docker-compose
в двух разных версиях Python и две разные версии OpenSSL. Можете ли вы сделать прямую сборку Docker (например, docker build .
)?
Да, docker build
работает нормально:
[~/tmp/docker-compose-fixing]$ docker build -t hhh .
Sending build context to Docker daemon 27.28 MB
Step 0 : FROM debian:stable
---> 315baabd82d5
Successfully built 315baabd82d5
[~/tmp/docker-compose-fixing]$ docker run hhh --verbose
Error response from daemon: Cannot start container 4843e6bbbbbdd363356cb5536f82ce8cfada0960ed865242ebfe825ba7eade50: [8] System error: exec: "--verbose": executable file not found in $PATH
Но docker-compose build
нет :)
[~/tmp/docker-compose-fixing]$ docker-compose build deb1
Building deb1...
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
Nevermind :) Спасибо за помощь и усилия. В любом случае, хорошо знать, что кто-то docker-compose
работал над OSX, возможно, в какой-то момент я бы тоже работал!
Я полагаю, есть одна радость: я больше не думаю, что ваша проблема связана с docker-machine
. : разочарованный_релед:
Это _может_ быть проблемой с docker-compose
, но это не docker / compose # 890. Поскольку это кажется таким трудным для воспроизведения вне вашей среды, я подозреваю, что вам нужно будет серьезно покопаться на своей стороне, чтобы правильно диагностировать это (например, используя pdb
, может быть, даже dtrace
или wireshark
чтобы полностью понять, что происходит).
Я хотел бы быть более полезным. :расстроен:
Закрывая это, пожалуйста, повторно откройте как новую проблему, если вы можете предоставить воспроизводимый тестовый пример. благодаря
@PavelPolyakov
Одно очень грязное решение, которое помогло мне:
Объявите в / etc / hosts ваш IP-адрес докера как localhost, например
192.168.99.100 локальный хост
а затем вы вводите локальный хост DOCKER_HOST вместо своего IP-адреса.
экспорт DOCKER_HOST = tcp: // localhost : 2376
И, наконец, на вашем Mac у вас будут работать вместе docker и docker-compose.
Но я признаю, это действительно грязно: d, но если это может помочь на время, может быть, стоит попробовать.
Для тех, кто не знаком с этой проблемой, но пришел сюда извне (например, поиск в Интернете), см. Https://github.com/docker/compose/issues/890#issuecomment -159750418 @pmahoney относительно CURL_CA_BUNDLE
переменная окружения - возможная причина. ( @PavelPolyakov , если вы можете убедиться, что это была причина вашей проблемы, подумайте об обновлении OP, чтобы другим не приходилось читать всю историю коммитов.)
@posita
Готово, спасибо за помощь, хорошо, что проблема решена.
Я столкнулся с той же ошибкой, когда использовал команды docker-compose. Я, наконец, удалил докер-машину и использовал boot2docker, чтобы пересобрать mv, и проблема была решена.
Моя ОС - El Capitan, и кажется, что у mv, созданного докер-машиной, были конфликты сертификатов с моей системой.
Поскольку docker-compose основан на python и использует пакет python запросов, вы также должны отключить переменную среды REQUESTS_CA_BUNDLE
чтобы это работало:
unset CURL_CA_BUNDLE
unset REQUESTS_CA_BUNDLE
docker-compose up
Самый полезный комментарий
@PavelPolyakov Готово. Вот что сделал:
docker-machine regenerate-certs
Ошибка исчезла.