我正在使用docker-compose
来运行测试环境,该环境由大约5个不同的容器组成。容器间链接和共享卷(卷 - 来)非常有效。我还将一些端口暴露给主机,这很好用。
我缺少的是一种将我的一些真实服务器链接到这个环境的方法,没有硬编码的IP地址。使用docker run
,您可以使用--add-host
在/etc/hosts
文件中添加另一行。有没有办法用docker-compose做类似的事情?
我有个好消息:这将是在Compose 1.3中!
我在当前的RC(RC1)中使用它,如下所示:
rng:
build: rng
extra_hosts:
seed: 1.2.3.4
tree: 4.3.2.1
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
这是Compose的功能积压,但它看起来还没有开始工作。 Github issue.
好像应该说:
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地址。