使用docker-compose

时间:2016-02-25 10:14:28

标签: docker docker-compose dockerfile

我正在尝试将内存缓存服务器和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文件中自动执行此操作

任何想法?

2 个答案:

答案 0 :(得分:3)

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

这样所有容器将共享相同的网络堆栈,localhost将起作用。

答案 1 :(得分:1)

您不能为两个不同的主机指定相同的名称。你真的应该改变你的代码 - 硬编码<files> Var = </files> 因为不同服务的主机名是个坏主意。 (最好为每个服务使用不同的主机名。如果它们实际上在同一主机上运行,​​您可以将这些主机名别名为指向它。)

如果确实无法更改代码,则可以设置从实际localhost到托管服务的容器的隧道。