Macos 通过OSX上的Docker py连接到Docker机器 上下文

Macos 通过OSX上的Docker py连接到Docker机器 上下文,macos,ssl,docker,docker-machine,dockerpy,Macos,Ssl,Docker,Docker Machine,Dockerpy,我正在尝试使用连接到OSX上的 我不能简单地使用标准的客户机(base\u url=)unix://var/run/docker.sock“)因为docker是在docker机器上运行的虚拟机,而不是我的本地操作系统 相反,我尝试使用docker.tls将安全地连接到虚拟机: from docker import Client import docker.tls as tls from os import path CERTS = path.join(path.expanduser('~'),

我正在尝试使用连接到OSX上的

我不能简单地使用标准的
客户机(base\u url=)unix://var/run/docker.sock“)
因为docker是在
docker机器上运行的
虚拟机,而不是我的本地操作系统

相反,我尝试使用
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
的类似问题,即
docker machine
的旧版本,但我不太了解SSL证书是如何实现的。我尝试按照github问题中的建议,将
192.168.99.100 localhost
添加到我的
/etc/hosts
文件的末尾,但这并没有解决问题(即使在导出DOCKER\u主机之后)=tcp://localhost:2376)

可能通过证书连接不是
docker-machine
的方式,因此任何通过
docker-py
连接到特定
docker-machine
的替代方法的答案也是可以接受的

更新
似乎
docker machine
的v0.5.2试图通过
create
命令的
--tls san
标志来解决这个问题。需要进行验证,但通过brew进行的安装仍然提供了v0.5.1版本,因此我必须手动安装。

I安装了
docker machine
v0.5.2,详情见。然后我必须创建一台新机器,如下所示:

$ docker-machine create -d virtualbox --tls-san <hostname> <machine-name>

我在
证书路径中替换了
,在
基本url中替换了

看起来像是Docker py v1.8.0,您可以连接到Docker机器,如下所示

import docker
client = docker.from_env(assert_hostname=False)
print client.version()

请参阅文档

我正在尝试此解决方案,但我一直遇到以下问题:requests.exceptions.HTTPError:404客户端错误:找不到url:In/etc/hosts我已经尝试了这两种方法:dockerhost 192.168.99.100和:192.168.99.100dockerhost@BercoBeute运行
docker machine ip
并使用该ip。谢谢@cdagli,但我想删除对环境变量和用python代码完成所有配置
import docker
client = docker.from_env(assert_hostname=False)
print client.version()