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

따라서 재부팅할 때마다 그리고 컨테이너가 시작되거나 중지된 후에 resolv.conf 파일을 발행 netplan generate하고 수정해야 합니다.netplan apply

호스트의 resolv.conf 파일 상승을 중지하도록 docker에 어떻게 지시합니까?

내 거네트워크 계획다음과 같습니다.

# 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.confdhcpcdapt 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

해결 방법은 호스트에서 resolv.conf 마운트를 바인딩하는 것입니다. 호스트의 resolv.conf에 127.0.0.11이 추가되었는지 확인하십시오.

호스트의 /etc/resolv.conf에 127.0.0.11을 포함하고 이 resolv.conf를 docker compose 파일 위치에 복사하는 경우에만 이 해결 방법이 작동하는지 확인하십시오.

롤:

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

관련 정보