我已经和远程docker主机摔跤几个小时了。每次我尝试运行
$ eval (docker-machine env staging)
$ docker-compose up --build
我明白了:
backports.ssl_match_hostname.CertificateError: hostname 'xxx.xxx.xxx.xxx' doesn't match 'localhost'
我第一次遇到这个错误时,我发现我的本地dns有些问题。所以我看了/etc/hosts
,发现没有错。我确实有一个ip xxx.xxx.xxx.xxx
的条目。
然后我查看了我的docker环境变量。 DOCKER_MACHINE_NAME
已设置为我的环境,DOCKER_HOST
已设置为tcp://xxx.xxx.xxx.xxx:2376
。那可能是什么错?
然后我发现了this博文,建议将我的DOCKER_HOST
更改为localhost。我尝试过但它仍然没有用。最后,我在我的etc/hosts
文件中添加了一个条目,该文件将localhost
绑定到我的远程IP,将DOCKER_HOST
更改为localhost
,然后尝试docker-compose up
。它奏效了。
这同时令人烦恼和缓解。一方面,我可以部署到我的staging env。但我必须使用一个我不完全理解的奇怪的解决方法。任何人都能解释为什么这有用吗更重要的是,我做错了什么?
更新
这是env | grep DOCKER
:
DOCKER_CERT_PATH=/home/me/.docker/machine/machines/staging
DOCKER_HOST=tcp://xxx.xxx.xxx.xx:2376
DOCKER_MACHINE_NAME=staging
DOCKER_TLS_VERIFY=1
和docker-machine env staging
(我使用鱼壳):
set -gx DOCKER_TLS_VERIFY "1";
set -gx DOCKER_HOST "tcp://xxx.xxx.xxx.x:2376";
set -gx DOCKER_CERT_PATH "/home/me/.docker/machine/machines/staging";
set -gx DOCKER_MACHINE_NAME "staging";
# Run this command to configure your shell:
# eval (docker-machine env staging)
这是
Docker版本17.05.0-ce,build 89658be
docker-machine version 0.13.0,build 9ba6da9
docker-compose版本1.8.0,构建未知
更新2
我开始认为这是ssl证书的问题。所以我运行docker-machine regenerate-certs staging
并重新部署。仍然是同一个问题。想法?