2016-06-20 89 views
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_HOSTunix://


接下來我想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 

因此,爲了連接到從容器中主機的守護進程,我需要:

  1. 複製在編譯時從我的本地~/.docker/machines/machine/$machine/到容器證書。
  2. 構建時在容器中硬連線該主機的外部IP爲DOCKER_HOST(例如tcp://54.165.194.148:2376)。

有沒有辦法避免在外部接口上關閉TLS?我也不想爲每個需要運行的主機修改我的容器的Dockerfile

回答

-1

如果在環境中啓用或設置了DOCKER_TLS_VERIFY,則docker客戶端只會嘗試HTTPS連接。它試圖將DOCKER_HOST URI轉換爲https://地址。

要允許客戶端使用本地套接字,而不是HTTPS,你必須先設置DOCKER_TLS_VERIFY

[[email protected] docker]# unset DOCKER_TLS_VERIFY 

docker [command]作品在Unix套接字!

+1

您實際上不必設置任何這些環境變量 - 使用套接字是docker客戶端的默認行爲,並且證書不適用於套接字。只需安裝音量,確保您的容器已被授權,然後繼續。 –

+0

@PaulBecotte是的,發現後浪費了一堆時間。我確實需要'DOCKER_HOST' env var,因爲我正在使用一個讀取它的工具('spotify/docker-maven-plugin') –

相關問題