dhcpcd가 docker0 네트워크를 파괴하는 것을 방지하는 방법은 무엇입니까?

dhcpcd가 docker0 네트워크를 파괴하는 것을 방지하는 방법은 무엇입니까?

재현 방법:

  1. 이미 실행 중이 아니면 dhcpcd를 시작하세요.
  2. 도커 데몬 다시 시작
  3. 달리기docker run -it busybox ping -c 1 1.1.1.1

예상되는 동작:명령이 성공해야 합니다.

실제 동작:이 명령은 100% 패킷 손실을 보고합니다.

해결책:

dhcpcd 서비스를 중지하면 이 문제를 피할 수 있지만 확실히 실행 가능한 옵션은 아닙니다.

dhcpcd 로그의 관련 줄:

docker0: 인터페이스 삭제

세부 사항:

$ docker --version
Docker version 18.09.6-ce, build 481bc77156
$ dhcpcd --version
dhcpcd 7.2.1
Copyright (c) 2006-2019 Roy Marples
Compiled in features: INET ARP ARPing IPv4LL INET6 DHCPv6 AUTH
$ systemctl --version
systemd 242 (242.29-1-arch)
+PAM +AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
$ uname --kernel-name --kernel-release --kernel-version --machine --processor --hardware-platform --operating-system
Linux 5.1.9-arch1-1-ARCH #1 SMP PREEMPT Tue Jun 11 16:18:09 UTC 2019 x86_64 unknown unknown GNU/Linux

tl;dr 해결 방법: 전역이 아닌 인터페이스별로 dhcpcd를 활성화합니다.

왜 이런 일이 발생하는지에 대한 좋은 설명이 없습니다. 다른 누군가가 이것이 dhcpcd 버그인지, docker 버그인지 조사할 수 있기를 바랍니다. 또는 최신 dhcpcd 버전을 사용한 지 6주 후 그리고 마지막 docker 버전 이후 10일 후에 오늘 문제가 발생하기 시작한 이유에 대해 대답할 수 있기를 바랍니다(/var/log/에 따라). 팩맨.로그) . 어제 docker swarm initdocker swarm leave --force*오늘* 했는데 그 외에는 최근 관련된 변경 사항이 생각나지 않습니다.

해결책은 dhcpcd가 DHCP가 필요한 인터페이스만 명시적으로 관리하도록 하는 것입니다.. 먼저 dhcpcd를 전역적으로 비활성화합니다.

sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd

그런 다음 실제로 인터넷에 연결하는 데 사용하는 각 인터페이스에 대해 다음을 수행합니다( ip link목록은 참고자료 참조).

sudo systemctl enable dhcpcd@INTERFACE
sudo systemctl start dhcpcd@INTERFACE

* --force그동안 내가 아무것도 하지 않는 동안에는 docker swarm나를 놓아주지 않기 때문입니다.

데몬의 오류 응답: 관리자로 참여하는 노드에서 클러스터를 종료하려고 합니다. 마지막 관리자를 삭제하면 클러스터의 현재 상태가 모두 삭제됩니다. 이 메시지를 무시하는 데 사용됩니다 --force.

스택에서 작업하는 방식으로는 노드를 삭제해도 작동하지 않습니다.

데몬의 오류 응답: rpc 오류: 코드 = FailedPrecondition desc = 노드 shbgqin74wuljj9skxt6y6ej7은 클러스터 관리자이며 뗏목 클러스터의 구성원입니다. 제거되기 전에 작업자로 강등되어야 합니다.

다운그레이드도 작동하지 않습니다.

데몬의 오류 응답: rpc 오류: 코드 = FailedPrecondition desc = 떼의 마지막 관리자를 다운그레이드하려고 시도했습니다.

답변1

파티에 늦었지만 일부 사람들은 이것이 유용하다고 생각할 수 있습니다.

https://www.daemon-systems.org/man/dhcpcd.conf.5.html

인터페이스 거부

         When discovering interfaces, the interface name must not match
         pattern which is a space or comma separated list of patterns
         passed to fnmatch(3).

그래서 아마도 당신은 veth*를 하고 그걸로 끝낼 수 있을 것입니다

관련 정보