docker-compose 不更新 resolv.conf

thw*_*int 10 docker docker-compose

我有以下简化的 docker-compose 文件:

版本:'2'
服务:
    测试基地:
        容器名称:test.base
        图像:docker.pnet.ch/r-base:latest
        重启:失败
        网络:
            - 我的网
        dns: 192.168.198.2
        dns_search:
            - pext.ch
            - pnet.ch
网络:
    我的网:
        司机:桥
        驱动程序选择:
            com.docker.network.enable_ipv4:“真”
        ipam:
            驱动程序:默认
            配置:
                - 子网:192.168.198.0/24
                  网关:192.168.198.1

有了这个,我希望在容器 /etc/resolv.conf 中有以下条目:

搜索 pext.ch pnet.ch
名称服务器 192.168.198.2

但相反,我有以下内容:

搜索 pext.ch pnet.ch
名称服务器 127.0.0.11
选项 ndots:0

当我使用 docker run with --dns 手动启动容器时,192.168.199.2 /etc/resolv.conf 包含一个具有给定 IP 地址的名称服务器。

我的 docker-compose 文件有什么问题还是 docker-compose 中的错误?

我在 RHEL 和 docker-compose 1.9.0 上使用 docker 1.10.3 版

Fra*_*ong 10

我曾经volumes:解决过这个问题。在你的情况下:

version: '2'
services:
    test.base:
        container_name: test.base
        image: docker.pnet.ch/r-base:latest
        restart: on-failure
        networks:
            - mynet
        volumes:
            - ./resolv.conf:/etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

./resolv.conf文件包含您所期望的内容:

search pext.ch pnet.ch
nameserver 192.168.198.2
Run Code Online (Sandbox Code Playgroud)

这里假设该resolv.conf文件与您的 docker-compose 文件位于同一文件夹中。

  • 我最终做了同样的事情。我无法通过在 docker-compose.yml 中指定 dns 来正确解析我的容器:( (2认同)
  • 如果您通过容器名称引用 docker-network 中的其他容器,并且将卷设置为答案中的设置,则会丢失所需的条目(例如 127.0.0.11)以正确解析名称。我仍在努力让这个工作干净利落。 (2认同)

cha*_*rli 8

Docker Compose 文件格式 v2 中的网络与版本 1 不同,我认为这是实际问题。docker run ...命令有效而docker-compose ...无效也令人困惑。我遇到了同样的问题。

我发现 Docker Compose v2为文件中定义的容器创建了一个用户定义的网络docker-compose.yml,而docker run ...默认情况下使用桥接网络docker0在主机上命名。此外,对于自定义网络,docker 使用嵌入式 DNS 服务器(即127.0.0.11)。文档说:

--dns如果嵌入式 DNS 服务器无法解析来自容器的名称解析请求,则通过该选项传递的 IP 地址由嵌入式 DNS 服务器用于转发 DNS 查询。这些--dnsIP 地址由嵌入式 DNS 服务器管理,不会在容器的/etc/resolv.conf文件中更新

我认为最后一行回答了你的问题。无论如何,您的容器应该正确解析,不是吗?