首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免dhcpcd破坏docker0网络?

如何避免dhcpcd破坏docker0网络?
EN

Unix & Linux用户
提问于 2018-01-24 23:48:02
回答 1查看 990关注 0票数 4

复制的How:

  1. 启动dhcpcd,除非它已经运行
  2. 重新启动停靠守护进程
  3. 运行docker run -it busybox ping -c 1 1.1.1.1

Expected行为:命令应该成功。

Actual行为:命令报告100%的数据包丢失。

解决办法:

停止dhcpcd服务可以避免这个问题,但当然不是可行的选择。

dhcpcd日志中的相关行:

docker0:删除接口

详细信息:

代码语言:javascript
复制
$ 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。

我无法很好地解释为什么会发生这种情况。希望其他人能够了解这是否是dhcpcd错误、坞错误,或者其他原因,在使用了6周的最新dhcpcd版本和10天后(根据/var/log/pacman.log)使用最新的dhcpcd版本后,这个错误就会开始崩溃。我昨天做了docker swarm init,今天做了docker swarm leave --force*,但除此之外,我想不出最近发生的任何相关变化。

<#>A的解决方法是让dhcpcd只显式地管理那些需要DHCP的接口。第一次全局禁用dhcpcd:

代码语言:javascript
复制
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd

然后,您实际用于连接到Internet的每个接口(列表请参见ip link ):

代码语言:javascript
复制
sudo systemctl enable dhcpcd@INTERFACE
sudo systemctl start dhcpcd@INTERFACE

* --force,因为在此期间,虽然我对docker swarm没有做任何其他事情,但它不让我离开:

守护进程的错误响应:您正在尝试将群集留在作为管理器参与的节点上。删除最后一个管理器将擦除群集的所有当前状态。使用--force忽略此消息。

在堆栈中按我的方式工作,删除节点无效:

来自守护进程的错误响应: rpc错误: code = FailedPrecondition desc = node shbgqin74wuljj9skxt6y6ej7是集群管理器,是raft集群的成员。搬迁前必须将其降职为工人。

降职也不起作用:

来自守护进程的错误响应: rpc错误: code = FailedPrecondition desc =尝试降级群集的最后一个管理器

EN

回答 1

Unix & Linux用户

发布于 2021-02-16 19:40:47

虽然晚会晚了,但有些人可能会觉得很有用:

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

密度界面

代码语言:javascript
复制
         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*并完成它。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/419492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档