上下文
我试图在OSX上使用docker-py连接到docker-machine.
我不能简单地使用标准客户端(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的类似问题,即.旧版本的docker-machine,但我不太了解SSL证书的实现方式.我尝试在github问题中建议将192.168.99.100 localhost添加到我的/ etc / hosts文件的末尾,但这并没有解决问题(即使在导出DOCKER_HOST = tcp:// localhost:2376之后).
也许通过证书连接不是停靠码机的方法,所以任何通过docker-py连接到特定码头机的替代方法的答案也是可以接受的.
UPDATE
看起来像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()
请参阅doc here