我使用docker-compose
来运行测试环境,该环境由大约5个不同的容器组成。容器间链接和共享卷(卷 - 来)非常有效。我还将一些端口暴露给主机,这很好用。
我缺少的是一种将我的一些真实服务器链接到此环境的方法,而无需硬编码IP地址。使用docker run
,您可以使用--add-host
在/etc/hosts
文件中添加另一行。有没有办法用docker-compose做类似的事情?
答案 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地址。