使用docker-compose将多个docker容器链接到一个具有别名localhost的容器

我想链接一个memcache服务器和一个mongo服务器到我的networking服务器,但是我已经使用localhost作为主机名。 所以我想把它们作为本地主机。

我正在这样做 –

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

但进入networking服务器后

 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文件中自动执行此操作

有任何想法吗?

你不能给两个不同的主机同名。 你真的应该改变你的代码 – 硬编码localhost作为不同的服务的主机名是一个坏主意。 (最好为每个服务设置不同的主机名,如果他们真的在同一个主机上运行,​​可以使用别名来指向它)。

如果您确实无法更改代码,则可以从实际的localhost到承载服务的容器build立隧道。

正如其他答案已经指出,你不能两次使用相同的别名。 你可能会做的是在其他服务中使用net:webserver (在v2中,这将是network_mode:webserver )。

这样所有的容器将共享相同的networking堆栈,本地主机将工作。