[英]Connecting to Docker-Machine via docker-py on OSX
我正在嘗試使用docker-py連接到OSX上的docker-machine 。
我不能簡單地使用標准Client(base_url='unix://var/run/docker.sock')
因為Client(base_url='unix://var/run/docker.sock')
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問題與boot2docker
類似的問題,即。 舊版本的docker-machine
,但我不太了解SSL證書的實現方式。 我嘗試在github問題中建議將192.168.99.100 localhost
添加到我的/etc/hosts
文件的末尾,但這並沒有解決問題(即使在export DOCKER_HOST=tcp://localhost:2376
)。
也許通過證書連接不是docker-machine
,所以任何通過docker-py
連接到特定docker-machine
替代方法的答案也是可以接受的。
更新看起來像docker 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()
請參閱此處的文檔
我安裝了docker docker-machine
v0.5.2,詳見github上的發行版 。 然后我只需要創建一個新機器如下:
$ docker-machine create -d virtualbox --tls-san <hostname> <machine-name>
然后我將<hostname> <machine-ip>
到/etc/hosts
。 之后代碼工作了
from docker import Client
import docker.tls as tls
from os import path
CERTS = path.join(path.expanduser('~'), '.docker', 'machine', 'machines', <machine-name>)
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
)
client = docker.Client(base_url='https://<machine-ip>:2376', tls=tls_config)
我替換了CERTS
路徑中的<machine-name>
並替換了base_url
中的<machine-ip>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.