[英]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.