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 *をしてそれで終わることができます。

おすすめ記事