我docker-compose
用来运行一个测试环境,它由大约 5 个不同的容器组成。容器间链接和共享卷(volumes-from)工作得很好。我还将一些端口暴露给主机,效果很好。
我缺少的是一种将我的一些真实服务器链接到这个环境的方法,而无需硬编码 IP 地址。使用docker run
,您可以使用--add-host
在文件中添加另一行/etc/hosts
。有没有办法用 docker-compose 做类似的事情?
我docker-compose
用来运行一个测试环境,它由大约 5 个不同的容器组成。容器间链接和共享卷(volumes-from)工作得很好。我还将一些端口暴露给主机,效果很好。
我缺少的是一种将我的一些真实服务器链接到这个环境的方法,而无需硬编码 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://github.com/compose-spec/compose-spec/blob/master/spec.md#extra_hosts
extra_hosts - 添加主机名映射。使用与 docker 客户端 --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
基本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
似乎应该可以说:
extra_hosts:
- "loghost:localhost"
因此,如果冒号后面的部分(通常是 IP 地址)不以数字开头,则将执行名称解析以查找 localhost 的 IP,并在容器的 /etc/hosts 中添加类似的内容:
127.0.0.1 日志主机
...假设 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 地址。