惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
博客园 - Franky
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)

Allen Hua 的网络博客

由于 Linux 桌面没有一个好用的天气程序就写了一个跨平台的CheckitoutWeather 给 caesium-image-compressor 图片压缩程序构建了 Linux AppImage v2.8.5 最新版 debian13(debian trixie)安装了nvidia闭源驱动后从x11切换到wayland的方法 山间摩旅追风,偶遇一场绚烂晚霞 最近使用debian系统的一些心得 机械革命无界14Pro笔记本debian forky成功驱动内置扬声器和麦克风 记录 typecho 1.2.0 升级到 1.3.0 过程 开发了一款openwrt插件:文本剪贴板 解决机械革命笔记本内屏高刷240Hz闪屏问题 使用 Java 写了一个局域网端口扫描器 - Allen Hua 的网络博客 openwrt使用外置根extroot机制扩展根分区大小 - Allen Hua 的网络博客 将机场ss节点批量转换成ss字符串链接批量添加到passwall - Allen Hua 的网络博客 给机械革命钛钽plus换屏:NY2换成NZ2 - Allen Hua 的网络博客 记录一次pve宿主机和上面的debian虚机无故down机事件 - Allen Hua 的网络博客 给图床部署cdn腾讯云的edgeone并排查Cache-Control max-age 3600的问题 - Allen Hua 的网络博客 从高山草甸到徽派古村:武功山反穿与皖浙赣自驾行记 - Allen Hua 的网络博客 增程器就是充电宝?别被忽悠了 - Allen Hua 的网络博客 浦口龙虎巷扫街,记录人间真实 博客图片压缩方案更新|AVIF|WebP|MozJPEG|标准JPEG Windows 电脑使用 Obs Studio 录制各个网站视频/桌面画面教程 为typecho博客添加latex支持 新能源汽车之纯电车使用交流慢充和直流快充的充电损耗对比 2025年3月更新全国5A景区名录 2025最新查看小米/红米手机电池健康度和循环次数方法 完美解决 seafile FILE_SERVER_ROOT 配置导致的内网外网不能同时访问和上传下载的问题 纯css实现typecho博客文章文字spoiler剧透效果 我对Typecho Facile主题的一些修改,图片懒加载优化,样式定制 2024年8月我的宜昌 - 重庆 - 川西小环线自驾旅行分享 2022年打卡南京市区人防工程纳凉点 2024年带着A7C2+腾龙28-200 再次来到红山森林动物园
一次因为光猫桥接后路由器接口变化导致docker内容器无法联网...
Allen Hua · 2021-04-24 · via Allen Hua 的网络博客
阅读量:3936

warning: 这篇文章距离上次修改已过1828天,其中的内容可能已经有所变动。

2021-05-24 15:06:45 update

实际上这有可能是 docker 的一个bug,重启了宿主机之后也需要重启一下 dockerd 容器才可以联网。不过也有可能是开机自启脚本有问题,但是前者的可能性更大。/etc/init.d/dockerd restart 重启一下 dockerd 就好啦

2021-04-24 19:52:15 update

写这篇文章的过程中我脑海中就一直在发问,为什么有 dns 的问题,明明已经返回了正确的 ip 了,但就是 icmp 包没有返回,全都丢失,这为什么是 dnsmasq 的问题呢,为什么要监听 eth4 的 ip? 没有必要呀,docker中的容器将 dns query 发给 软路由的 lan 口,lan有到wan的路由通路,dnsmasq 根本就不需要监听 eth4 的ip 了。事实证明是因为 wan 那边原本是通过光猫 拨号 这边 dhcp 获取的ip,前两天改成了光猫桥接 这边 wan(也就是 eth4)通过 PPPoE 拨号上网的,dockerd 需要重启才能获得网络,我没有重启dockerd 导致没网的。

讨论见这个帖子:ping 域名返回了ip 但是ping不通是为什么?

实际上对于本文的标题,解决方法很简单,重启 dockerd 就好了


以下是原文:

我说昨晚微信没有收到 server酱 的一个推送,平常都是准时准点的,但是昨晚并没有推送消息到微信,我还以为docker容器(代称容器A,就是发现容器A无法联网,才知道所有容器都没法联网了,影响很大)挂掉了 或者 docker daemon 挂掉了。刚通过日志确认,应该是容器无法访问网络了的原因。日志如下图

20210424140814.png

还有这段日志

2021-04-23 20:50:08 ERROR : org.apache.http.conn.HttpHostConnectException: Connect to sc.ftqq.com:443 [sc.ftqq.com/220.181.136.120] failed: Connection refused (Connection refused),

由于此时这个容器没有网络,所以我们也不能安装 ping 工具包测试,我们使用其他自带 ping 工具的镜像/容器 测试。

# 此时在openwrt中,进入 emby 这个镜像的容器中 ping 测试看看

docker exec -it emby /bin/ash

# 执行完上面的命令就已经进入了 emby 的容器,emby 是容器的名称(你也可以使用容器id)
# ping baidu.com -c 4
PING baidu.com (220.181.38.148): 56 data bytes

--- baidu.com ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

没有 ICMP 包返回,说明网络不通。

想想和之前有何不同?那肯定是光猫改了桥接啊?️,现在我的软路由的 eth0 到 eth4 接口有所变化,上面的ping返回了ip地址但是没有 icmp 包返回。问题还是出在dns 上?

看看目前软路由和光猫连接的 eth4 接口信息

# ifconfig eth4
eth4      Link encap:Ethernet  HWaddr 00:E0:70:2A:3F:59  
          inet addr:192.168.1.254  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13129963 errors:0 dropped:18497 overruns:0 frame:0
          TX packets:20642219 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:9423348725 (8.7 GiB)  TX bytes:23961982092 (22.3 GiB)

因为设置了软路由 eth4(wan, PPPoE 拨号的接口)直通光猫 192.168.1.1,所以设置了 eth4 的ip地址是 192.168.1.254。见这篇文章:光猫桥接模式下使用openwrt路由器访问光猫配置教程

从容器中 traceroute 10.10.10.1 或者 192.168.1.254 再到 192.168.1.1 都是通的,说明这里路由表没问题,问题还是出在docker的宿主机(也就是 openwrt)dns 的监听。

查看一下 /etc/dnsmasq.conf

resolv-file=/etc/resolv.dnsmasq.conf
strict-order
listen-address=127.0.0.1,10.10.10.1,172.10.10.1,192.168.20.1
addn-hosts=/etc/dnsmasq.hosts

将 listen-address 中添加 eth4 的 IP,因为这个接口是wan,通向光猫然后直到 Internet 的接口,修改好之后是

resolv-file=/etc/resolv.dnsmasq.conf
strict-order
listen-address=127.0.0.1,10.10.10.1,172.10.10.1,192.168.20.1,192.168.1.254
addn-hosts=/etc/dnsmasq.hosts

改好了之后重启 dnsmasqdockerd

/etc/init.d/dnsmasq restart

/etc/init.d/dockerd restart

再进入容器A,这个容器使用 debian 系的软件包管理方式,默认没有安装 ping ifconfig 等程序,我们自己安装一下确认吧(此时已经修复好了容器的网络了)

# 更新一下软件源列表
apt-get update

# 安装 ifconfig
apt-get install net-tools

# 安装 ping
apt-get install iputils-ping

ifconfig 一下看看

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.10.10.0  netmask 255.255.0.0  broadcast 172.10.255.255
        ether 02:42:ac:0a:0a:00  txqueuelen 0  (Ethernet)
        RX packets 7019  bytes 9321265 (8.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5005  bytes 366618 (358.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 28  bytes 2098 (2.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 2098 (2.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

容器A 的 ip 是 172.10.10.0,容器使用的网络网关地址是 172.10.10.1,这个地址在 dnsmasq 的监听列表中,没问题~

ping 一下看看

# ping baidu.com -c 4
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=49 time=22.8 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=49 time=22.5 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=49 time=22.9 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=49 time=23.2 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 6ms
rtt min/avg/max/mdev = 22.511/22.846/23.174/0.299 ms

ok 好耶,解决了

本文的记录或分享结束,end.