使用--add-host或extra_hosts与docker-compose

Pie*_*ter 51 hosts docker docker-compose

docker-compose用来运行一个测试环境,它包含大约5个不同的容器.容器间链接和共享卷(卷 - 来)非常有效.我还将一些端口暴露给主机,这很好用.

我缺少的是一种将我的一些真实服务器链接到这个环境的方法,没有硬编码的IP地址.使用docker run,您可以使用--add-host/etc/hosts文件中添加另一行.有没有办法用docker-compose做类似的事情?

jpe*_*zzo 57

我有个好消息:这将是在Compose 1.3中!

我在当前的RC(RC1)中使用它,如下所示:

rng:
  build: rng
  extra_hosts:
    seed: 1.2.3.4
    tree: 4.3.2.1
Run Code Online (Sandbox Code Playgroud)

  • 这里的嵌套字典的格式已经过时了。这个答案/sf/answers/4286181721/ 是最新的。 (3认同)
  • 对于任何发现此错误的人,都会说不支持的配置指令“ extra-hosts”,而不是“ extra-hosts”,而是“ extra_hosts”。 (2认同)

one*_*klc 53

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"
Run Code Online (Sandbox Code Playgroud)

将在此服务的容器内的/ etc/hosts中创建具有ip地址和主机名的条目,例如:

162.242.195.82  somehost
50.31.209.229   otherhost
Run Code Online (Sandbox Code Playgroud)

  • 构建不支持 (8认同)
  • 如何将外部名称(不是 IP)映射到容器别名? (4认同)
  • 该文档再次移动:https://github.com/compose-spec/compose-spec/blob/master/spec.md#extra_hosts (2认同)
  • `extra_hosts` 似乎被支持作为 `build` 的未记录子项,至少在 compose 2.4.1 上是这样。 (2认同)
  • 现在构建也应该支持它:https://github.com/compose-spec/compose-spec/blob/master/build.md#extra_hosts (2认同)

Shu*_*ham 20

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
        
Run Code Online (Sandbox Code Playgroud)

/etc/hosts创建的容器中文件的内容:

162.242.195.82  your-host.name.com
50.31.209.229   your-host--1.name.com your-host--2.name.com
Run Code Online (Sandbox Code Playgroud)

您可以/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
Run Code Online (Sandbox Code Playgroud)