假设我有一个包含两个容器的docker compose文件。两者都在/ etc / hosts文件中相互引用。容器A具有容器B的参考,反之亦然。所有这些都是自动发生的。现在我想在A的hosts文件中为B添加一个或多个主机名。我该怎么做呢?有没有一种特殊方法可以在Docker Compose中实现这一点?
示例:
172.0.10.166 service-b my-custom-hostname
答案 0 :(得分:13)
是。在撰写文件中,您可以指定network aliases。
services:
db:
networks:
default:
aliases:
- database
- postgres
在此示例中,默认网络上的其他容器可以使用db
,db
或database
来访问postgres
服务。
您也可以使用docker network connect
命令--alias=
选项add aliases to running containers。
答案 1 :(得分:3)
Docker撰写具有extra_hosts功能,允许将其他条目添加到容器的主机文件中。
web1:
image: tomcat:8.0
ports:
- 8081:8080
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
web2:
image: tomcat:8.0
ports:
- 8082:8080
web3:
image: tomcat:8.0
ports:
- 8083:8080
使用新的docker 1.9 networking feature运行docker compose:
$ docker-compose --x-networking up -d
Starting tmp_web1_1
Starting tmp_web2_1
Starting tmp_web3_1
并查看第一个容器中的hosts文件。显示其他容器以及其他自定义条目:
$ docker exec tmp_web1_1 cat /etc/hosts
..
172.18.0.4 web1
172.18.0.2 tmp_web2_1
172.18.0.3 tmp_web3_1
50.31.209.229 otherhost
162.242.195.82 somehost
答案 2 :(得分:0)
如果我正确理解了您的问题,您可以通过--add-host标志传递主机&etc / hosts文件中引用的主机名:
$ docker run ... --add-host="droid"
您的主机/ etc / hosts需要以下条目: xx.xx.xx.xx droid
当然,xx.xx.xx.xx需要从刚开始使用' docker run'的容器内部访问。命令。您可以拥有一个或多个--add-host =" xyz"。
有关--add-host的详细信息: