当前位置: 首页 > 知识库问答 >
问题:

docker compose不更新resolv.conf

司徒浩思
2023-03-14

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

version: '2'
services:
    test.base:
        container_name: test.base
        image: docker.pnet.ch/r-base:latest
        restart: on-failure
        networks:
            - mynet
        dns: 192.168.198.2
        dns_search:
            - pext.ch
            - pnet.ch
networks:
    mynet:
        driver: bridge
        driver_opts:
            com.docker.network.enable_ipv4: "true"
        ipam:
            driver: default
            config:
                - subnet: 192.168.198.0/24
                  gateway: 192.168.198.1

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

search pext.ch pnet.ch
nameserver 192.168.198.2

但相反,我有以下内容:

search pext.ch pnet.ch
nameserver 127.0.0.11
options ndots:0

当我使用docker手动启动容器时,运行-DNS 192 . 168 . 199 . 2/etc/resolv . conf包含一个具有给定ip地址的名称服务器。

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

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

共有3个答案

谯阳伯
2023-03-14

如前所述,resolv。conf由于某些原因没有改变,因此我发现了docker compose的一个肮脏的黑客:更改解析。在docker构建期间,conf处于原位。

您应该在命令开始时更改文件,并且在命令结束前保持不变。

像这样:

运行echo“nameserver 10.100.1.13”

我知道这远不是好的编码实践,但我认为它比安装/etc/resolf更优雅。conf来自外部世界。

南门飞
2023-03-14

Docker Compose文件格式v2中的网络与版本1不同,我认为这是实际问题。同样令人困惑的是,docker运行…命令有效,而docker编写…命令无效。我也经历过同样的问题。

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

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

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

冀永寿
2023-03-14

我使用卷:来解决这个问题。在您的情况下:

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

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

search pext.ch pnet.ch
nameserver 192.168.198.2

这里假设< code>resolv.conf文件与docker-compose文件在同一个文件夹中。

 类似资料:
  • 我有一个大 gui 的 JList,我删除了所有其他不相关的代码。我可以初始化列表,但在使用按钮时无法从中添加/删除项目。我读到的所有内容都说要使用DefaultListModel。然后,当您重新初始化列表时,它将自动更新列表。 我也尝试重新聚焦并重新粉刷面板和框架,但这也不起作用。

  • 我找到了更新数据的示例,但它使用了DefaultTableModel。当我创建自己的TableModel和自己的data类时,当我将数据添加到JTable中时,它不会更新。 有我的桌子模型: 当我添加了任何信息,但它没有更新。在JTable中,我必须把这个方法放在哪里来进行正确的数据更新?

  • 问题内容: 我正在通过ng-repeat循环渲染数据。而且我希望它在更新数组时进行更新。从我阅读的内容来看,这应该会自动发生,但是这是行不通的。那我在做什么错? 的HTML: 控制器(此功能通过ng-click在按钮上触发): Console.log显示该数组已正确更新,但是我视图中的表未更改。我不知道我在做什么错。 问题答案: 那是因为您在method中更改了数组引用。 为了避免这种情况,我们使

  • 我现在迷路了。

  • 我奔跑 我得到一个错误: 无法将您的需求解析为可安装的软件包集。 当前在require dev中有以下设置: 以及我们公司创建的一个不相关的翻译包。 我正在尝试将codeception更新到最新版本。 我已经尝试过在不同的版本中设置phpunit,但我无法消除错误。 我做错了什么? 最新消息 我更新composer.json使用相同版本的包 输出,除 跑了 仍然得到错误: 那是为什么呢?在我设置新

  • 问题内容: 我正在尝试将JProgressBar添加到我的程序中,但不会更新!仅当原因为100%时,该值才会更改。这是我的方法。 更改进度栏的值位于上述方法的底部。 这就是我所谓的方法。 编辑:以上根本不是问题,问题之一是程序正在使用整数除法而不是十进制。 问题答案: 是一个整数,也是。因此发生的是小数被截断。你应该做什么,就像 这样做是确保将其除以具有十进制功能的数据类型,该数据类型将返回更具包