2017-06-29 89 views
2

我想通過docker-in-docker設置與父Docker集裝箱中的一個小孩碼頭集裝箱聯網。Docker集裝箱網絡與Docker-in-Docker

假設我試圖連接到一個簡單的Apache httpd服務器。當我在我的主機上運行的httpd容器,一切工作正常:

asnyder:~$ docker run -d -p 8080:80 httpd:alpine 
asnyder:~$ curl localhost:8080 
<html><body><h1>It works!</h1></body></html> 

但是,當我做同樣的從泊塢窗功能於泊塢窗的設置,我得到一個Connection refused錯誤:

asnyder:~$ docker run -d --name mydind --privileged docker:dind 
asnyder:~$ docker run -it --link mydind:docker docker:latest sh 
/# docker run -d -p 8080:80 httpd:alpine 
/# curl localhost:8080 
curl: (7) Failed to connect to localhost port 8080: Connection refused 

我嘗試了幾次改變,但沒有運氣。指定0.0.0.0接口:

asnyder:~$ docker run -d --name mydind --privileged docker:dind 
asnyder:~$ docker run -it --link mydind:docker docker:latest sh 
/# docker run -d -p 0.0.0.0:8080:80 httpd:alpine 
/# curl 0.0.0.0:8080 
curl: (7) Failed to connect to 0.0.0.0 port 8080: Connection refused 

使用主機網絡:

asnyder:~$ docker run -d --name mydind --privileged docker:dind 
asnyder:~$ docker run -it --link mydind:docker docker:latest sh 
/# docker run -d --network host httpd:alpine 
/# curl localhost:80 
curl: (7) Failed to connect to localhost port 80: Connection refused 

出人意料的是,我無法找到這個任何現有的文章。有人在這裏有一些見解嗎?

謝謝!

+0

讓我先問你,如果你確定你想要碼頭泊位設置?先閱讀[this](http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/)博文。 – JonesV

+0

@JonesV我避免進入問題的具體情況,以保持它的一般性,但因爲你問... 我正在寫一個[GitLab CI管道作業](https://docs.gitlab.com/ee/CI/YAML /)。 GitLab CI中的作業在您可以指定的Docker容器內運行。我正在編寫一個基於某些HTML生成PDF報告的作業,並且我想利用現有的Docker映像來執行此操作。所以,我有一個碼頭泊位的情況。 我希望這有助於澄清:) –

+0

恐怕我無法幫助碼頭泊位設置。我只是想確保你知道博客文章中提到的要點=)。 – JonesV

回答

1

DinD和綁定Docker套接字都有優點和缺點,並且兩者都有一定的用例。作爲一個例子,請查看this set of blog posts,它很好地解釋了其中的一個用例。

鑑於您的例子泊塢窗功能於泊塢窗上面設置,您可以通過以下兩種方式之一訪問的Apache httpd服務:

1)從docker:dind容器內,這將可在localhost:8080

2)從docker:latest容器中,您最初嘗試訪問它的容器中,它將可用於爲docker:dind容器設置的任何主機名。在這種情況下,您使用了--name mydind,因此curl mydind:8080會爲您提供標準的Apache <html><body><h1>It works!</h1></body></html>

希望它是有道理的!