title: “🛳️ 当Docker网络抽风时,如何优雅地摔键盘(并悄悄修好它)”
author: “Cjs”
date: “2025-2-23”
当你的容器们开始玩"失联游戏"时…
ERROR: Could not connect to database
容器A:"嘿兄弟你在哪?"
容器B:"我在192.168.9.2啊!"
宿主机:"你们说的这个ip...我根本不认识啊!"
经典崩溃现场:
- 容器间突然开始"量子通信"(时通时不通)
- 端口映射像被黑洞吞噬了一样无效
- DNS解析速度堪比树懒🦥
- 自定义网络变成了单向玻璃
🔧 故障自救指南(附赠表情包疗愈)
场景1:端口被占用的终极对决
docker: Error response from daemon: Port is already allocated.
暴躁解法:
sudo lsof -i :80 # 查看哪个小妖精占用了端口
sudo kill -9 $(lsof -t -i :80) # 发动"死亡一指"
优雅方案:
docker run -p 8080:80 --name decoy_container nginx # 声东击西
场景2:DNS摆烂的破局之道
curl: (6) Could not resolve host: api.github.com
网络诊断三连:
docker exec -it my_container cat /etc/resolv.conf # 查看DNS配置
docker run --dns 8.8.8.8 alpine nslookup github.com # 指定Google DNS
systemctl status systemd-resolved # 检查本地DNS服务
终极奥义:
# docker-compose.yml 拯救方案
services:
app:
dns:
- 8.8.8.8
- 1.1.1.1
networks:
- my_special_network
场景3:自定义网络的神秘失踪
WARNING: Network "my_network" not found.
网络考古学家模式:
docker network ls # 列出所有网络(像翻通讯录)
docker network inspect bridge # 查看网络详情(像查户口)
docker network create --driver=bridge --subnet=192.168.100.0/24 cjs_net # 自建小区
高阶技巧:
# 给容器发"身份证"(静态IP)
docker run --network=cjs_net --ip=192.168.100.66 alpine
🕵️♂️ 网络侦探工具包
容器版"网络体检"
docker exec -it my_container ping db_container # 基础连通性测试
docker exec -it my_container traceroute google.com # 路由追踪
docker exec -it my_container curl -v http://api:8000 # 详细请求分析
宿主机的"网络听诊器"
sudo tcpdump -i docker0 port 5432 # 监听Docker网桥流量
sudo iptables -L DOCKER-USER -nv # 查看Docker防火墙规则
brctl show docker0 # 查看网桥配置(需要bridge-utils)
🌉 Cjs的跨容器沟通哲学
class DockerNetworking:
def __init__(self):
self.patience = 100 # 耐心值
self.coffee_level = 0 # 咖啡因储备
def troubleshoot(self):
while True:
print("检查基本连通性...")
if self.find_typo_in_compose_file(): # 永远先检查拼写!
return "🎉 问题解决!"
self.coffee_level += 1
if self.coffee_level > 3:
print("进入狂暴模式💥")
self.recreate_network() # 删库跑路式解决方案
return "🤷♂️ 至少现在能用了..."
# 使用示例
network = DockerNetworking()
print(network.troubleshoot())
金句墙:
- “好的网络配置就像空气,平时感觉不到存在,一旦消失立刻窒息”
- “每个丢包事故,都是网络协议在教你什么是人生无常”
- “程序员最硬核的浪漫:为容器设计专属CIDR段💕”
🚢 扬帆起航的正确姿势
# 一键清理历史遗留问题
docker network prune # 删除所有未使用网络(慎用!)
# 推荐安全驾驶配置
docker-compose up --force-recreate # 强制刷新网络
遇到更奇葩的网络问题? 在评论区贴出你的docker network inspect
结果~
觉得有用? 收藏⭐ ➕ 转发🔄 ➕ 点赞👍 素质三连走起!
“当你的容器终于连上网时,
那不仅是TCP的三次握手,
更是你和计算机灵魂的击掌✋”
—— Cjs《容器网络沟通艺术》
🐾 下期预告
《无》😎
(关注不迷路,我们一起在故障的海洋里冲浪!🏄♂️)