2015-12-19 33 views
2

我有三個搬運工集裝箱看(平)對方,問題越來越搬運工容器的名字

  1. 的Java容器(JC):我的Java應用程序(春季啓動)
  2. elasticsearch容器(EC) :對ElasticSearch
  3. 測試容器(TC):測試容器用ping測試解決

目前,JC不能看到EC的 「名」。當我說「看」我的意思是,如果我在JC上執行ping命令,我會得到一個ping: unknown host。有趣的是,如果我在TC上做了一個ping到EC,我確實得到了迴應。

以下是我如何啓動容器。

  1. docker run -dit --name JC myapp-image
  2. docker run -d --name EC elasticsearch:1.5.2 elasticsearch -Des.cluster.name=es
  3. docker run --rm --name TC -it busybox:latest

然後,從JC ping通EC,我發出以下命令。

docker exec JC ping -c 2 EC 

我得到一個ping: unknown host

隨着TC,因爲我已經在殼,我可以做一個ping -c 2 EC,我得到2個回覆。

我想也許這與我的Java應用程序有關,但我懷疑它,因爲我修改了我的Dockerfile以站起來容器。 Dockerfile如下所示。

FROM java:8 
VOLUME /tmp 

請注意,您可以通過docker build -no-cache -t myapp-image .創建上述泊塢窗圖像。

另請注意,我安裝了Docker Weave Net,這似乎並不能幫助JC按名稱查看EC。另一方面,我試圖找到每個容器的IP地址如下。

  1. docker inspect -f '{{ .NetworkSettings.IPAddress }}' JC - >172.17.0.4
  2. docker inspect -f '{{ .NetworkSettings.IPAddress }}' EC - >172.17.0.2
  3. docker inspect -f '{{ .NetworkSettings.IPAddress }}' TC - >172.17.0.3

我肯定能平乳油JC通過IP地址:docker exec JC ping -c 2 172.17.0.2。但是通過IP地址讓容器看到對方並沒有幫助,因爲我的Java應用程序需要將主機名引用作爲其配置的一部分。

關於發生了什麼事情的任何想法?容器是自己的圖像嗎?爲什麼busybox容器映像能夠通過名稱ping ElasticSearch容器,但java容器不能?

一些更多的信息。

  • VirtualBox 5.0。10
  • 泊塢1.9.1
  • 編織1.4.0
  • CentOS的1503年7月1日
  • 我在Windows 10桌面爲分段環境中進行部署之前運行搬運工一個CentOS VM裏面AWS

任何幫助表示讚賞。

回答

3

在同一個碼頭工人守護進程,使用old --link option以更新每個組件的/等/主機,並確保人們可以ping了:

docker run -d --name EC elasticsearch:1.5.2 elasticsearch -Des.cluster.name=es 
docker run -dit --name JC --link ED myapp-image 
docker run --rm --name TC -it busybox:latest 

然後,docker exec JC ping -c 2 EC應該工作。

如果不是,請檢查這不是因爲基礎映像和安全問題:請參閱「Addressing Problems with Ping in Containers on Atomic Hosts」。
JC基於docker/_java:8,其本身基於jessie-curljessie

0

默認網絡中的容器能夠使用IP地址相互通信。 Docker不支持在默認網橋上自動發現服務。如果您想在此默認橋接網絡中與容器名稱進行通信,則必須通過傳統泊塢窗運行 - 鏈接選項連接容器。 docs.docker.org

它也應該使用新的網絡。

docker network create -d bridge non-default 
docker run --net non-default ... 

沒有它(從看docker network inspect AFAICT)適用於這種行爲的默認網絡的特定選項。我想這只是由選項「com.docker.network.bridge.default_bridge」觸發。

在另一個問題的第一部分中,建議在Docker 1.9中對此進行了更改。請注意,Docker 1.9是在穩定版本中打開新的網絡系統時。我從上面引用的用戶指南部分在版本1.8中不存在。 Docker 1.9.0 "bridge" versus a custom bridge network results in difference in hosts file and SSH_CLIENT env variable