macos - 在 OSX 上通过 docker-py 连接到 Docker-Machine

标签 macos ssl docker docker-machine dockerpy

上下文

我正在尝试使用 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/

相关文章:

linux - Unix 命令 rmdir 什么时候适合使用?

macos - 用 applescript 复制数字表

macos - MacOS 日志键的keycode

java - 用Java实现3270协议(protocol)

docker - GITLAB-CI - 加入由 docker-compose 创建的网络

c++ - 在 Xcode 4 中添加自定义目的地

ssl - 服务器可以向客户端发送多个证书吗?

security - 使用自定义域的安全 websocket 到 OpenShift 应用程序失败

docker - 群 : Get Node Ip and Container IP from service

node.js - Docker 和 Nginx 解析错误的 IP 地址