使用--add-host或extra_hosts与docker-compose

时间:2015-03-16 11:56:35

标签: docker hosts docker-compose

我使用docker-compose来运行测试环境,该环境由大约5个不同的容器组成。容器间链接和共享卷(卷 - 来)非常有效。我还将一些端口暴露给主机,这很好用。

我缺少的是一种将我的一些真实服务器链接到此环境的方法,而无需硬编码IP地址。使用docker run,您可以使用--add-host/etc/hosts文件中添加另一行。有没有办法用docker-compose做类似的事情?

5 个答案:

答案 0 :(得分:44)

我有个好消息:这将出现在Compose 1.3中!

我在当前的RC(RC1)中使用它,如下所示:

rng:
  build: rng
  extra_hosts:
    seed: 1.2.3.4
    tree: 4.3.2.1

答案 1 :(得分:43)

https://docs.docker.com/compose/compose-file/#extra_hosts

  

extra_hosts - 添加主机名映射。   使用与docker client --add-host参数相同的值。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"
     

将在/ etc / hosts>中创建具有IP地址和主机名的条目。用于此服务的内部容器,例如:

162.242.195.82  somehost
50.31.209.229   otherhost

答案 2 :(得分:6)

具有额外主机的基本docker-compose.yml

version: '3'
services:
api:
    build: .
    ports:
        - "5003:5003"
    extra_hosts:
        - "your-host.name.com:162.242.195.82" #host and ip
        - "your-host--1.name.com your-host--2.name.com:50.31.209.229" #multiple hostnames with same ip
        

已创建容器中/etc/hosts文件中的内容:

162.242.195.82  your-host.name.com
50.31.209.229   your-host--1.name.com your-host--2.name.com

您可以使用以下命令检查/etc/hosts文件:

$ docker-compose -f path/to/file/docker-compose.yml run api bash  # 'api' is service name
#then inside container bash
root@f7c436910676:/app# cat /etc/hosts

答案 3 :(得分:2)

这是Compose的功能积压,但它看起来还没有开始工作。 Github issue.

答案 4 :(得分:0)

似乎应该可以这样说:

extra_hosts:
 - "loghost:localhost"

因此,如果冒号后面的部分(通常是IP地址)不是以数字开头,则将执行名称解析以查找localhost的IP,并在容器的/ etc / hosts中添加类似内容:

127.0.0.1日志主机

...假设本地主机在主机系统上解析为127.0.0.1。

添加docker-compose的源代码看起来真的很容易:compose / config / types.py的parse_extra_hosts函数可能会做到这一点。

对于Docker本身,这可能可以在opts / hosts.go的ValidateExtraHost函数中添加,尽管那时它不再严格地进行验证,因此该函数会被误命名。

将其添加到docker而不是docker-compose实际上可能要好一些-docker-compose可能会在docker接收到时自动获取。

遗憾的是,这可能需要通过容器弹跳才能更改IP地址。