簡體   English   中英

使用docker-compose將多個Docker容器鏈接到一個別名為localhost的容器

[英]Linking multiple docker containers to one container with alias localhost using docker-compose

我正在嘗試將Memcache服務器和mongo服務器鏈接到我的Web服務器,但是我使用的代碼將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

僅memcache服務器獲得別名localhost,而不是mongo服務器。

在我將localhost手動添加到mongo的條目之后,它開始很好地工作。

172.17.0.3      localhost adocker_mongoserver_1 a505d8de4736

但是我想在docker-compose.yml文件中自動執行此操作

有任何想法嗎?

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

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

您不能給兩個不同的主機使用相同的名稱。 您確實應該更改代碼–將localhost硬編碼為不同服務的主機名是一個壞主意。 (最好為每個服務使用不同的主機名。如果它們實際上在同一主機上運行,​​則可以為這些主機名加上別名以指向該主機名。)

如果您確實無法更改代碼,則可以設置從實際localhost到承載服務的容器的隧道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM