我正在尝试将内存缓存服务器和mongo服务器链接到我的网络服务器,但我使用的代码使用localhost作为主机名。所以我想将它们链接为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文件中自动执行此操作
任何想法?
答案 0 :(得分:3)
正如其他答案已经说明的那样,您不能两次使用相同的别名。你可能会做的是在其他服务中使用net:webserver
(在v2中这将是network_mode:webserver
)。
这样所有容器将共享相同的网络堆栈,localhost将起作用。
答案 1 :(得分:1)
您不能为两个不同的主机指定相同的名称。你真的应该改变你的代码 - 硬编码<files>
Var =
</files>
因为不同服务的主机名是个坏主意。 (最好为每个服务使用不同的主机名。如果它们实际上在同一主机上运行,您可以将这些主机名别名为指向它。)
如果确实无法更改代码,则可以设置从实际localhost
到托管服务的容器的隧道。