背景
我正在尝试使用docker-py连接到OSX上的docker-machine。
由于docker运行在docker-machine
虚拟机中,而不是我的本地操作系统上,因此无法简单地使用标准的Client(base_url='unix://var/run/docker.sock')
。
相反,我正在尝试使用docker.tls
安全地连接到虚拟机:
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'
我一直在尝试关注与
boot2docker
有类似问题的Github issue,即旧版本的docker-machine
,但我并不了解SSL证书的实现方式。我尝试按照Github issue中建议的方法,在我的/etc/hosts
文件末尾添加192.168.99.100 localhost
,但这并没有解决问题(即使在执行export DOCKER_HOST=tcp://localhost:2376
之后)。也许通过证书连接不是使用docker-machine
的正确方法,因此任何提供使用docker-py
连接到特定docker-machine
的替代方法的答案也是可接受的。更新:看起来docker-machine
的v0.5.2尝试通过--tls-san
标志来解决这个问题,需要验证,但是通过brew
安装仍然会得到v0.5.1,所以我必须手动安装。