我docker-compose
用来运行一个测试环境,它由大约5个不同的容器组成。容器间链接和共享卷(从)开始工作非常好。我还向主机公开了一些端口,效果很好。
我所缺少的是在不对IP地址进行硬编码的情况下将一些真实服务器链接到此环境的方法。使用docker run
,您可以用来--add-host
在/etc/hosts
文件中添加另一行。有什么办法可以与docker-compose做类似的事情吗?
Answers:
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
基本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日志主机
...假设本地主机在主机系统上解析为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地址。