2016-02-25 81 views
2

我試圖將一個memcache服務器和一個mongo服務器鏈接到我的web服務器,但是我已經使用localhost作爲它們的主機名。所以我想把它們作爲本地主機。使用docker-compose將多個docker容器鏈接到一個使用別名localhost的容器

我做這個 -

webserver: 
    build: ./webserver 
ports: 
    - "127.0.0.1:80:80" 
volumes: 
    - /var/www/html:/var/www/html 
links: 
    - memcachedserver:localhost 
    - mongoserver:localhost 

docker exec -it acb51XXXX081 bash 

cat /etc/hosts 

我得到這個 -

127.0.0.1  localhost 
::1  localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.2  adocker_memcachedserver_1 4a11d0cb3126 
172.17.0.2  localhost 4a11d0cb3126 adocker_memcachedserver_1 
172.17.0.2  memcachedserver_1 4a11d0cb3126 adocker_memcachedserver_1 
172.17.0.3  adocker_mongoserver_1 a505d8de4736 
172.17.0.3  mongoserver_1 a505d8de4736 adocker_mongoserver_1 
01進入Web服務器後

只有memcache服務器獲取別名localhost,而不是mongo服務器。

我手動添加localhost到mongo的條目後,它開始工作很好。

172.17.0.3  localhost adocker_mongoserver_1 a505d8de4736 

但我想在泊塢窗,compose.yml文件

任何想法自動做到這一點?

+0

我不確定你可以使用相同的別名來引用2個不同的容器 – OttavioMonzione

+0

那麼你能推薦任何方式來實現我在這裏? – xRahul

回答

1

你不能給兩個不同的主機同名。你真的應該改變你的代碼 - 硬編碼localhost作爲不同服務的主機名是一個壞主意。 (最好每個服務都有不同的主機名,如果他們真的在同一個主機上運行,​​你可以使用別名來指向它)。

如果你真的不能更改你的代碼,您可以從實際的localhost建立隧道到承載服務的容器。

+0

嗨達格!我知道爲不同容器設置相同的別名是一個壞主意,因爲它不僅僅是它們的主機名。我要去試試'net:'dnephin。 你能詳細談談你談到的隧道方法嗎? – xRahul

+0

要設置隧道,您可以使用'ssh'的隧道功能。 –

3

正如其他答案已經指出,你不能兩次使用相同的別名。你可能會做的是在其他服務中使用net:webserver(在v2中這將是network_mode:webserver)。

這樣所有的容器將共享相同的網絡堆棧,並且localhost將工作。

+0

謝謝!我一定會盡快嘗試。我不得不通過docker構建一個Kafka集羣,如果我能夠在同一個網絡中獲得它們,這將非常有幫助。 – xRahul

+0

版本2的語法是'network_mode:service:webserver' –

相關問題