![每次启动或停止 Docker 容器时,主机上的 resolv.conf 都会被覆盖](https://linux22.com/image/160855/%E6%AF%8F%E6%AC%A1%E5%90%AF%E5%8A%A8%E6%88%96%E5%81%9C%E6%AD%A2%20Docker%20%E5%AE%B9%E5%99%A8%E6%97%B6%EF%BC%8C%E4%B8%BB%E6%9C%BA%E4%B8%8A%E7%9A%84%20resolv.conf%20%E9%83%BD%E4%BC%9A%E8%A2%AB%E8%A6%86%E7%9B%96.png)
每次我启动或停止任何 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 generate
并netplan 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
会发生变化。我重新启动,它确实改变了。我删除了dhcpcd
,apt 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