bash
docker network ls
docker network inspect [网络名]
如果容器不在同一网络,需要创建网络并连接容器:
bash
docker network create my_network
docker network connect my_network container1
docker network connect my_network container2
bash
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名
bash
docker exec -it 容器1 ping 容器2的IP
bash
iptables -L -n
bash
systemctl stop firewalld # CentOS/RHEL
ufw disable # Ubuntu
bash
docker exec -it 容器1 ping 容器2
如果无法解析,确保使用正确的容器名称或配置了正确的DNS。0.0.0.0
而不是127.0.0.1
# 运行容器时使用--link参数(已不推荐)
docker run --name container1 --link container2:alias ...
# 或使用默认桥接网络
docker run --network bridge ...
# 创建自定义网络
docker network create my_app_net
# 运行容器并加入该网络
docker run -d --name container1 --network my_app_net ...
docker run -d --name container2 --network my_app_net ...
# 现在容器可以通过名称互相访问
docker exec -it container1 ping container2
docker run --network host ...
注意:这会共享主机网络栈,可能有安全隐患
docker run -p 8080:80 ...
使用tcpdump抓包:
docker run --net=container:容器名 nicolaka/netshoot tcpdump -i eth0
使用netshoot工具:
docker run -it --net container:容器名 nicolaka/netshoot
检查路由表:
docker exec 容器名 ip route
如果问题仍未解决,请提供以下信息以便进一步诊断:
- docker version
- docker info
- 容器启动命令
- docker network inspect
输出
- 相关容器的日志信息