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

问题描述 投票:38回答:4

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

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

docker hosts docker-compose
4个回答
46
投票

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

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

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

45
投票

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

1
投票

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


0
投票

好像应该说:

extra_hosts:
 - "loghost:localhost"

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

127.0.0.1 loghost

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

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

对于docker本身,这可能在opts / hosts.go的ValidateExtraHost函数中可以添加,虽然它不再严格验证,所以函数会有点错误。

将它添加到docker可能实际上好一点,而不是docker-compose - 如果docker得到它,docker-compose可能会自动获取它。

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

© www.soinside.com 2019 - 2024. All rights reserved.