0
我想從docker機器創建的主機上的容器使用docker守護進程。如何從在Docker Machine配置的主機上運行的容器中使用docker守護進程?
起初,我試圖連接到通過批量安裝Unix套接字(-v /var/run/docker.sock:/var/run/docker.sock
)主機守護進程,但一直未能:
[[email protected] docker]# env | grep DOCKER
DOCKER_HOST=unix:///var/run/docker.sock
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/etc/docker
[[email protected] code]# docker images
An error occurred trying to connect: Get https://%2Fvar%2Frun%2Fdocker.sock/v1.23/images/json: tls: oversized record received with length 20527
我不知道爲什麼它試圖連接連通過HTTPS儘管DOCKER_HOST
是unix://
。
接下來我想tcp://
,但失敗了,因爲由泊塢窗機產生的TLS證書生成只爲主機的外部接口工作。
# On the host
[email protected]:~$ ps aux | grep 'docker daemon'
root 23678 0.4 0.7 907564 59648 ? Ssl 10:01 1:16 /usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=amazonec2
# From the container
[[email protected] docker]# env | grep DOCKER
DOCKER_HOST=tcp://172.17.0.1:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/etc/docker
[[email protected] docker]# docker images
An error occurred trying to connect: Get https://172.17.0.1:2376/v1.23/images/json: x509: certificate is valid for 54.165.194.148, not 172.17.0.1
因此,爲了連接到從容器中主機的守護進程,我需要:
- 複製在編譯時從我的本地
~/.docker/machines/machine/$machine/
到容器證書。 - 構建時在容器中硬連線該主機的外部IP爲
DOCKER_HOST
(例如tcp://54.165.194.148:2376
)。
有沒有辦法避免在外部接口上關閉TLS?我也不想爲每個需要運行的主機修改我的容器的Dockerfile
。
您實際上不必設置任何這些環境變量 - 使用套接字是docker客戶端的默認行爲,並且證書不適用於套接字。只需安裝音量,確保您的容器已被授權,然後繼續。 –
@PaulBecotte是的,發現後浪費了一堆時間。我確實需要'DOCKER_HOST' env var,因爲我正在使用一個讀取它的工具('spotify/docker-maven-plugin') –