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

时间:2015-11-13 15:04:04

标签: docker hostname docker-compose

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

示例:

172.0.10.166 service-b my-custom-hostname

3 个答案:

答案 0 :(得分:13)

是。在撰写文件中,您可以指定network aliases

services:
  db:
    networks:
      default:
        aliases:
          - database
          - postgres

在此示例中,默认网络上的其他容器可以使用dbdbdatabase来访问postgres服务。

您也可以使用docker network connect命令--alias=选项add aliases to running containers

答案 1 :(得分:3)

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

实施例

搬运工-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

演示主机文件条目

使用新的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的详细信息:

http://docs.docker.com/v1.8/reference/commandline/run/