上下文
我正在尝试使用 docker-py连接到 docker-machine在 OSX 上。
我不能简单地使用标准 Client(base_url='unix://var/run/docker.sock')
因为 docker 在 docker-machine
上运行虚拟机,而不是我的本地操作系统。
相反,我尝试使用 docker.tls
将安全连接到 VM :
from docker import Client
import docker.tls as tls
from os import path
CERTS = path.join(path.expanduser('~'), '.docker', 'machine', 'certs')
tls_config = tls.TLSConfig(
client_cert=(path.join(CERTS, 'cert.pem'), path.join(CERTS,'key.pem')),
ca_cert=path.join(CERTS, 'ca.pem'),
verify=True
#verify=False
)
client = docker.Client(base_url='https://192.168.99.100:2376', tls=tls_config)
问题
当我尝试运行此代码时(在下一行运行类似 print client.containers()
的内容),我收到此错误:
requests.exceptions.SSLError: hostname '192.168.99.100' doesn't match 'localhost'
我一直在尝试关注 github issue关于 boot2docker
的类似问题, IE。旧版本 docker-machine
,但我不太了解 SSL 证书是如何实现的。我尝试添加 192.168.99.100 localhost
到我的/etc/hosts
结束github问题中建议的文件,但这并没有解决问题(即使在 export DOCKER_HOST=tcp://localhost:2376
之后)。
也许通过证书连接不是 docker-machine
的方法,因此任何使用连接到特定 docker-machine
的替代方法的答案通过docker-py
也可以接受。
更新
看起来像 docker-machine
的 v0.5.2尝试通过 --tls-san
解决此问题create
的标志命令。需要验证但通过brew
安装还在给v0.5.1,所以我得手动安装。
最佳答案
看起来使用 Docker-py v1.8.0,您可以连接到 Docker-machine,如下所示;
import docker
client = docker.from_env(assert_hostname=False)
print client.version()
参见文档 here
关于macos - 在 OSX 上通过 docker-py 连接到 Docker-Machine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256645/