ERROR: Could not connect to database
容器A:"嘿兄弟你在哪?"
容器B:"我在192.168.9.2啊!"
宿主机:"你们说的这个ip...我根本不认识啊!"
经典崩溃现场:
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 # 声东击西
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
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)
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())
金句墙:
# 一键清理历史遗留问题
docker network prune # 删除所有未使用网络(慎用!)
# 推荐安全驾驶配置
docker-compose up --force-recreate # 强制刷新网络
遇到更奇葩的网络问题? 在评论区贴出你的docker network inspect
结果~
觉得有用? 收藏⭐ ➕ 转发 ➕ 点赞 素质三连走起!
“当你的容器终于连上网时,
那不仅是TCP的三次握手,
更是你和计算机灵魂的击掌✋”
—— Cjs《容器网络沟通艺术》
下期预告
《无》
(关注不迷路,我们一起在故障的海洋里冲浪!♂️)