如何重现:
- 启动 dhcpcd,除非它已经在运行
- 重新启动 docker 守护进程
- 跑步
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 版本六周和最后一个 docker 版本十天后今天会开始出现问题(根据 /var/log /pacman.log)。我docker swarm init
昨天和docker swarm leave --force
*今天做了,但除此之外我想不出任何最近的相关变化。
解决方法是让 dhcpcd 仅显式管理那些需要 DHCP 的接口。首先全局禁用 dhcpcd:
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd
然后,针对您实际用于连接 Internet 的每个接口(请参阅ip link
参考资料 的列表):
sudo systemctl enable dhcpcd@INTERFACE
sudo systemctl start dhcpcd@INTERFACE
*--force
因为虽然我在此期间没有做任何其他事情,但docker swarm
它不会让我离开:
来自守护程序的错误响应:您正在尝试将集群留在作为管理器参与的节点上。删除最后一个管理器会删除集群的所有当前状态。用于
--force
忽略此消息。
按照我的方式在堆栈中工作,删除节点不起作用:
来自守护进程的错误响应:rpc 错误:code = FailedPrecondition desc = 节点 shbgqin74wuljj9skxt6y6ej7 是集群管理器,并且是 raft 集群的成员。移除前必须先降级为工人
并且降级也不起作用:
来自守护进程的错误响应:rpc 错误:code = FailedPrecondition desc = 尝试降级 swarm 的最后一个管理器
答案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* 并完成它