web-dev-qa-db-ja.com

dhcpcdがdocker0ルートを削除しないようにするにはどうすればよいですか?

再現方法:

  1. すでに実行されていない限り、dhcpcdを起動します
  2. Dockerデーモンを再起動します
  3. 実行docker run -it busybox ping -c1 example.orgtwice少なくとも1〜2秒の遅延

期待される動作:両方のコマンドが成功するはずです。

実際の動作:最初のコマンドは成功しますが、2番目のコマンドは成功しません。

上記のステップ3の前に、docker0ルートが存在します。

$ ip route list | grep docker0
169.254.0.0/16 dev docker0 proto kernel scope link src 169.254.0.1 linkdown 

最初のdockerコマンドの後、ルートは消えます。

回避策:

Dhcpcdサービスを停止すると、この問題は回避されますが、もちろん実行可能なオプションではありません。

Dhcpcdジャーナルの関連行:

docker0: soliciting a DHCP lease
docker0: soliciting an IPv6 router
docker0: carrier lost
docker0: deleting address fe80::9a2f:9b6e:5b:a42e

詳細:

$ docker --version
Docker version 18.01.0-ce, build 03596f51b1
$ dhcpcd --version
dhcpcd 6.11.5
Copyright (c) 2006-2016 Roy Marples
Compiled in features: INET IPv4LL INET6 DHCPv6 AUTH
$ systemctl --version
systemd 236
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN default-hierarchy=hybrid
$ uname --kernel-name --kernel-release --kernel-version --machine --processor --hardware-platform --operating-system
Linux 4.14.15-1-Arch #1 SMP PREEMPT Tue Jan 23 21:49:25 UTC 2018 x86_64 unknown unknown GNU/Linux
2
l0b0

tl; dr回避策:グローバルではなくインターフェイスごとにdhcpcdを有効にします。

なぜこれが起こるのかについての良い説明はありません。うまくいけば、他の誰かがこれがdhcpcdバグか、dockerバグかを調べたり、最新のdhcpcdバージョンを6週間使用し、最後のdockerバージョンを10日間使用した後、今日これが壊れ始めた理由に答えるでしょう(/ var/logによる) /pacman.log)。昨日はdocker swarm init、今日はdocker 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はクラスターマネージャーであり、raftクラスターのメンバーです。削除する前にワーカーに降格する必要があります

また、降格も機能しませんでした。

デーモンからのエラー応答:rpcエラー:コード= FailedPrecondition desc =群れの最後のマネージャーを降格しようとしています

1
l0b0