使用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堆栈,本地主机将工作。
- 如何着色docker集装箱的日志
- 使用Intellj IDEA进行Tomcat远程部署
- Dotnet core 2 docker:找不到可执行的匹配命令“dotnet-watch”
- 如何为Jenkinsconfigurationdockerfile和docker-compose
- 无法在运行泊坞窗镜像时find设置docker工作区选项的选项
- 有没有一个商定的UML图样式来logging或说明(Docker)容器在系统架构规范中的angular色?
- Docker镜像构build卡住挂起
- Docker的exec rm不工作
- Elastic Beanstalk单容器泊坞窗 – 使用awslogslogging驱动程序