如何将主机名添加到同一个docker网络上的容器中?

saa*_*ada 11 hostname docker docker-compose

假设我有一个包含两个容器的docker compose文件.两者都在/ etc/hosts文件中相互引用.容器A具有容器B的参考,反之亦然.所有这些都是自动发生的.现在我想在A的hosts文件中为B添加一个或多个主机名.我该怎么做呢?有没有一种特殊的方法可以在Docker Compose中实现这一点?

例:

172.0.10.166 service-b my-custom-hostname

Ste*_*eve 16

是.在撰写文件中,您可以指定网络别名.

services:
  db:
    networks:
      default:
        aliases:
          - database
          - postgres
Run Code Online (Sandbox Code Playgroud)

在这个例子中,该db服务可以通过默认的网络上的其他容器中使用达到db,databasepostgres.

您还可以使用docker network connect带有该--alias=选项的命令向运行的容器添加别名.


Mar*_*nor 5

Docker compose 有一个extra_hosts功能,允许将其他条目添加到容器的主机文件中。

例子

docker-compose.yml

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
Run Code Online (Sandbox Code Playgroud)

演示主机文件条目

使用新的docker 1.9 网络功能运行 docker compose :

$ docker-compose --x-networking up -d
Starting tmp_web1_1
Starting tmp_web2_1
Starting tmp_web3_1
Run Code Online (Sandbox Code Playgroud)

并查看第一个容器中的主机文件。显示其他容器,以及额外的自定义条目:

$ 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
Run Code Online (Sandbox Code Playgroud)