在docker-compose中使用--add-host或extra_hosts


76

docker-compose用来运行一个测试环境,它由大约5个不同的容器组成。容器间链接和共享卷(从)开始工作非常好。我还向主机公开了一些端口,效果很好。

我所缺少的是在不对IP地址进行硬编码的情况下将一些真实服务器链接到此环境的方法。使用docker run,您可以用来--add-host/etc/hosts文件中添加另一行。有什么办法可以与docker-compose做类似的事情吗?

Answers:


90

我有个好消息:它将在Compose 1.3中发布!

我在当前的RC(RC1)中使用它是这样的:

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

3
对于任何发现此错误的人,都会说不支持的配置指令“ extra-hosts”,而不是“ extra-hosts”,而是“ extra_hosts”。
Prasanth

71

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

11
不支持对构建
expelledboy

1
链接似乎已断开。这是正确的:docs.docker.com/compose/compose-file/#extra_hosts
Pablo Torrecilla

1
如何将外部名称(不是IP)映射到容器别名?
阿德里亚诺·多斯·桑托斯·费尔南德斯

您的意思是设置主机名?-h主机名docs.docker.com/engine/userguide/networking/default_network/... :或使用泊坞窗,撰写一个别名docs.docker.com/compose/compose-file/#aliases
oneklc

5

基本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

2

似乎应该可以说:

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地址。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.