如何从docker compose文件重写/etc/resolv.conf中docker的嵌入式dns服务器

mtb9vblg  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(539)

我正在使用docker compose命令来创建和启动容器。
我的docker版本 docker --version Docker version 17.09.0-ce, build afdb6d4 我的docker撰写版本 docker-compose --version docker-compose version 1.16.1, build 6d1ac21 我使用的.yml文件如下所示:(注意,我刚刚缩短了它,以便去掉敏感的内容)

---
services:
  zookeeper:
    image: "zookeeper"
  server-1:
    cap_add:
    - "NET_ADMIN"
  server-0:
    cap_add:
    - "NET_ADMIN"
    dns:
    - 8.8.8.8
    - 9.9.9.9
    environment:
      SERVER_ID: 0
      NETEM_HOSTS: ""
      LOSS_VALUES: ""
      MAX_RATE_VALUES: ""
      DELAY_VALUES: ""
    image: "cloud.mycompany.com:5000/server-0:latest"
  fakedns:
    image: "cloud.mycompany.com:5000/fakedns:latest"
version: "3.3"

然后我开始使用: docker-compose --file compose.yml up -d 我的问题是:
1) 在容器出现后。。。当我进入一个容器(例如,在本例中是server-0)时,我没有看到/etc/resolv.conf文件被更新以使用这些名称服务器。相反,它使用了docker的嵌入式dns,即127.0.0.11
2) 如何确保它使用docker compose使用的文件中指定的内容
3) 我试着用命令来做这件事,它似乎工作,但我需要从撰写文件 docker run -p 4000:53 --dns=8.8.8.8 cloud.mycompany.com:5000/server-0:latest 4) 理想情况下,我希望它具有容器“fakedns”的ip地址,以便它使用这个地址而不是嵌入的地址@127.0.0.11

inb24sb2

inb24sb21#

您不会在中看到自定义dns服务器 /etc/resolv.conf 但docker的解析程序会将dns请求转发给他们。

用户定义的网络和dns

docker编写v2+定义默认情况下创建用户定义的网络。
具有用户定义网络的docker使用嵌入式dns服务器,以便docker可以响应本地容器请求(服务发现)。
对于docker无法解析的任何dns主机,请求将被转发到dns服务器上。这是系统默认服务器,即在中配置的服务器 dockerd 或在运行时为容器配置的dns服务器。

docker dns

使用内部dns服务器时要小心。docker守护进程中的内容将中断如果您将系统dns指向容器当您创建鸡或蛋问题时,docker需要启动dns但无法启动容器来提供dns。
由于您的示例配置仅为一个应用程序容器设置dns,因此应该可以,但在应用程序启动之前,请确保dns容器正常运行。

相关问题