使用 docker-compose 将多个 docker 容器链接到一个别名为 localhost 的容器
Linking multiple docker containers to one container with alias localhost using docker-compose
我正在尝试 link 一个内存缓存服务器和一个 mongo 服务器到我的网络服务器,但是我的代码使用 localhost 作为它们的主机名。所以我想 link 他们作为本地主机。
我正在做这个-
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
只有内存缓存服务器正在获取别名 localhost,mongo 服务器没有。
在我手动将 localhost 添加到 mongo 的条目后,它开始运行良好。
172.17.0.3 localhost adocker_mongoserver_1 a505d8de4736
但我想在 docker-compose.yml 文件中自动执行此操作
有什么想法吗?
您不能为两个不同的主机指定相同的名称。你真的应该改变你的代码——硬编码 localhost
作为不同服务的主机名是个坏主意。 (最好为每个服务设置不同的主机名。如果它们实际上 运行 在同一台主机上,您可以为这些主机名设置别名以指向它。)
如果您真的无法更改您的代码,您可以设置从实际localhost
到托管服务的容器的隧道。
正如其他答案已经指出的,您不能两次使用相同的别名。您可能会做的是在其他服务中使用 net:webserver
(在 v2 中这将是 network_mode:webserver
)。
这样所有容器将共享同一个网络堆栈,并且 localhost 可以工作。
我正在尝试 link 一个内存缓存服务器和一个 mongo 服务器到我的网络服务器,但是我的代码使用 localhost 作为它们的主机名。所以我想 link 他们作为本地主机。
我正在做这个-
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
只有内存缓存服务器正在获取别名 localhost,mongo 服务器没有。
在我手动将 localhost 添加到 mongo 的条目后,它开始运行良好。
172.17.0.3 localhost adocker_mongoserver_1 a505d8de4736
但我想在 docker-compose.yml 文件中自动执行此操作
有什么想法吗?
您不能为两个不同的主机指定相同的名称。你真的应该改变你的代码——硬编码 localhost
作为不同服务的主机名是个坏主意。 (最好为每个服务设置不同的主机名。如果它们实际上 运行 在同一台主机上,您可以为这些主机名设置别名以指向它。)
如果您真的无法更改您的代码,您可以设置从实际localhost
到托管服务的容器的隧道。
正如其他答案已经指出的,您不能两次使用相同的别名。您可能会做的是在其他服务中使用 net:webserver
(在 v2 中这将是 network_mode:webserver
)。
这样所有容器将共享同一个网络堆栈,并且 localhost 可以工作。