dokku网络诊断:容器网络连通性测试
你是否遇到过容器明明运行正常,外部请求却总提示"连接拒绝"?或者应用间通信频繁超时,却找不到问题根源?本文将通过6个实战步骤,帮你系统排查dokku环境中的网络连通性问题,从容器内部到外部访问全链路覆盖,让网络故障无所遁形。
诊断工具准备
dokku提供了完整的网络管理命令集,通过以下工具组合可实现全链路诊断:
# 查看网络状态报告
dokku network:report <app>
# 列出端口映射关系
dokku ports:list <app>
# 启用调试追踪模式
dokku trace:on
核心诊断插件位于plugins/network目录,包含底层网络配置逻辑。网络拓扑参考示意图:
容器内部连通性测试
步骤1:检查容器网络配置
首先确认容器是否获得正确的网络配置:
# 进入应用容器
dokku enter <app> web
# 检查网络接口
ip addr show
# 测试DNS解析
nslookup <other-app>.web
正常情况下,容器应具有类似172.17.0.x的IP地址,并能通过appname.web格式域名解析其他应用docs/networking/network.md#network-aliases。若解析失败,检查网络别名配置:
dokku network:set <app> tld svc.cluster.local
步骤2:测试容器间通信
使用dokku的run命令在目标网络环境中执行测试:
# 测试TCP端口连通性
dokku run <app> curl -v telnet://<other-app>.web:5000
# 测试UDP连通性(需提前暴露端口)
dokku run <app> nc -u <other-app>.web 1234
若通信失败,检查网络附件模式是否正确配置docs/networking/network.md#attaching-an-app-to-a-network:
# 跨应用通信需使用post-create模式
dokku network:set <app> attach-post-create shared-network
主机端口映射验证
步骤3:检查端口映射配置
通过端口报告确认映射关系是否正确:
dokku ports:report <app>
# 示例输出应包含
# Port map: http:80:5000 https:443:5000
若端口映射异常,可重新配置docs/networking/port-management.md:
# 清除错误映射
dokku ports:clear <app>
# 设置标准HTTP映射
dokku ports:add <app> http:80:5000
步骤4:验证主机端口监听
在宿主机执行以下命令,确认端口处于监听状态:
# 检查Nginx代理端口
sudo netstat -tulpn | grep nginx
# 检查直接暴露的容器端口
sudo netstat -tulpn | grep docker-proxy
常见问题:Dockerfile中使用EXPOSE指令会自动创建端口映射,可能与预期冲突docs/getting-started/troubleshooting.md#i-deployed-my-app-but-i-am-getting-the-default-nginx-page。
外部访问链路测试
步骤5:DNS与域名配置检查
使用dig命令验证域名解析:
dig <app>.dokku.me +short
# 应返回服务器公网IP
若解析异常,检查域名配置docs/networking/dns.md:
dokku domains:set <app> <app>.dokku.me
步骤6:代理层连通性测试
检查Nginx配置并测试代理连通性:
# 验证Nginx配置
dokku proxy:build-config <app>
# 直接测试代理后端
curl -H "Host: <app>.dokku.me" http://127.0.0.1
若出现502错误,可能是应用未监听正确地址docs/getting-started/troubleshooting.md#i-successfully-deployed-my-application-with-no-deployment-errors-and-receiving-bad-gateway-when-attempting-to-access-the-application,需确保应用监听0.0.0.0:
// Node.js示例
app.listen(process.env.PORT, '0.0.0.0', () => { ... })
高级诊断与排障
网络抓包分析
使用tcpdump在宿主机捕获网络流量:
# 监控docker0网桥
sudo tcpdump -i docker0 port 5000 -w network.pcap
# 监控Nginx代理端口
sudo tcpdump -i eth0 port 80 -w proxy.pcap
配置重置与恢复
当网络配置严重混乱时,可执行以下命令重置:
# 重建网络配置
dokku network:rebuildall
# 重建代理配置
dokku proxy:build-config --all --parallel -1
诊断流程图
通过以上步骤,90%的dokku网络问题都能准确定位。若问题依旧,可在社区论坛获取支持,提供完整的network:report和ports:report输出有助于快速解决问题。
实用命令清单:
- 网络状态总览:
dokku network:report <app> - 端口映射管理:
dokku ports:set <app> http:80:5000 - 容器网络测试:
dokku run <app> curl <other-app>.web:5000 - 配置重建工具:
dokku network:rebuild <app>&dokku proxy:build-config <app>
收藏本文以备网络故障时快速查阅,关注后续进阶篇:《dokku网络性能优化与监控》。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




