每次启动或停止 Docker 容器时,主机上的 resolv.conf 都会被覆盖

每次启动或停止 Docker 容器时,主机上的 resolv.conf 都会被覆盖

每次我启动或停止任何 Docker 容器时,/run/systemd/resolve/resolv.conf主机(Ubuntu 19.04)上的文件都会被覆盖:

# Generated by dhcpcd from enp30s0.dhcp
# /etc/resolv.conf.head can replace this line
nameserver 127.0.0.1
# /etc/resolv.conf.tail can replace this line

因此,每次重新启动以及容器启动或停止后,我都必须发出netplan generatenetplan apply修复 resolv.conf 文件。

如何让 docker 停止提升主机的 resolv.conf 文件?

我的网络计划看起来像这样:

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    renderer: networkd
    ethernets:
        enp30s0:
            addresses:
            - 10.0.10.20/24
            dhcp4: no
            gateway4: 10.0.10.1
            nameservers:
                addresses:
                - 10.0.10.1
    version: 2

当我跑步时systemd-resolve --status

Global
       LLMNR setting: no
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.0.10.1

这些是各种码头集装箱我有:

docker network create -d macvlan --subnet=10.0.10.0/24 --gateway=10.0.10.1 -o parent=enp30s0 macvlan-services-network


docker container create --name="pihole-kids" \
    --volume /opt/docker/volumes/pihole-kids/etc/pihole:/etc/pihole \
    --volume /opt/docker/volumes/pihole-kids/etc/dnsmasq.d:/etc/dnsmasq.d \
    --volume /opt/docker/volumes/pihole-kids/var/log/pihole.log:/var/log/pihole.log \
    --net macvlan-services-network \
    --ip 10.0.10.21 \
    --publish 53:53/tcp \
    --publish 53:53/udp \
    --publish 80:80 \
    --publish 443:443 \
    --dns=127.0.0.1 \
    --dns=10.0.10.20 \
    --add-host=restrict.youtube.com:216.239.38.120 \
    --add-host=restrictmoderate.youtube.com:216.239.38.119 \
    --add-host=forcesafesearch.google.com:216.239.38.120 \
    --add-host=strict.bing.com:204.79.197.220 \
    --add-host=safe.duckduckgo.com:34.243.144.154 \
    --env IPv6=False \
    --env ServerIP=10.0.10.21 \
    --env TZ="America/Chicago" \
    --restart=unless-stopped \
    pihole/pihole:latest



docker container create --name="pihole" \
    --volume /opt/docker/volumes/pihole/etc/pihole:/etc/pihole \
    --volume /opt/docker/volumes/pihole/etc/dnsmasq.d:/etc/dnsmasq.d \
    --volume /opt/docker/volumes/pihole/var/log/pihole.log:/var/log/pihole.log \
    --net=host \
    --env IPv6=False \
    --env ServerIP=10.0.10.20 \
    --env TZ="America/Chicago" \
    --dns=127.0.0.1 \
    --dns=10.0.10.1 \
    --restart=unless-stopped \
    pihole/pihole:latest


docker container create --name="emby-server" \
    --network="host" \
    --volume /opt/docker/volumes/emby/config:/config \
    --volume /mnt/media:/mnt/media \
    --device /dev/dri:/dev/dri \
    --runtime=nvidia \
    --publish 8096:8096 \
    --publish 8920:8920 \
    --env UID=997 \
    --env GID=997 \
    --env GIDLIST=1000 \
    --env NVIDIA_VISIBLE_DEVICES=all \
    --env NVIDIA_DRIVER_CAPABILITIES=compute,utility,video \
    emby/embyserver:latest


docker container create --name="nzbhydra2" \
    --volume /opt/docker/volumes/nzbhydra2/config:/config \
    --volume /mnt/Downloads:/mnt/Downloads \
    --volume /etc/localtime:/etc/localtime:ro \
    --publish 5076:5076 \
    --env UMASK=000 \
    --env PUID=1004 \
    --env PGID=1004 \
    binhex/arch-nzbhydra2


docker container create --name="portainer" \
    --volume /opt/docker/volumes/portainer/data:/data \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --publish 9000:9000 \
    --restart=always \
    portainer/portainer

答案1

弄清楚了!

在某个时候,dhcpcd它被安装在我的系统上。不知道为什么。在决定删除它之前,我编辑了该/etc/dhcpcd.conf文件并将其替换为,127.0.0.1看看10.0.10.1是否/etc/resolv.conf会发生变化。我重新启动,它确实改变了。我删除了dhcpcdapt purge dhcpcd5重新启动,现在名称服务器与我的网络规划中的保持一致。

希望这对遇到同样问题的其他人有帮助。

答案2

我们刚刚解决了类似的问题。每次部署 Docker 容器时,DNS 设置都会恢复到过时的设置。

该文件/etc/resolv.conf指向# This file is managed by man:systemd-resolved(8). Do not edit.

通过systemd-resolve --status我们发现网络适配器中的 DNS 设置错误,在配置文件中更改它/etc/systemd/network并通过 重新启动服务systemctl restart systemd-networkd

docker停止/启动后一切正常。

答案3

解决方法是从主机绑定 mount resolv.conf。 确保主机的 resolv.conf 中添加了 127.0.0.11。

请确保此解决方法仅在主机 /etc/resolv.conf 中包含 127.0.0.11 并将此 resolv.conf 复制到 docker compose 文件位置时才有效。

卷:

  • ./resolv.conf:/etc/resolv.conf

相关内容