Mac OS下Docker容器间通信异常问题求助
Docker Compose容器间DNS解析不稳定问题排查与解决
问题现象
- 容器位于
crypto-gatewaybridge网络,web容器无法稳定解析同网络内的其他容器(如crypto-gateway-db),解析成功的容器列表随Compose重启随机变化,多次重启后才恢复正常 - 4-5个月前无此问题,近期出现异常
环境信息
- Mac OS Ventura 13.5 (M2 MacBook Pro)
- Docker Desktop 4.21.1
- Docker Client: 24.0.2,Docker Server: 24.0.2-38-g8e70a1b23e
- 正在使用Tunnelblick VPN
调试步骤
确认容器网络归属
进入web容器,检查是否加入了crypto-gateway网络:docker exec -it crypto-gateway-web ip addr需确认存在对应网络的网卡(通常命名为
eth1或类似)检查容器DNS配置
在web容器内查看DNS服务器设置:docker exec -it crypto-gateway-web cat /etc/resolv.conf正常应指向Docker内部DNS服务
127.0.0.11,若指向VPN的DNS,说明VPN干扰了Docker网络测试Docker内部DNS解析
直接用Docker DNS服务测试目标容器:docker exec -it crypto-gateway-web nslookup crypto-gateway-db 127.0.0.11- 解析失败:Docker内部DNS服务异常
- 解析成功:容器内DNS缓存或网络栈存在问题
查看Docker日志
在Docker Desktop中查看daemon日志:点击右上角Docker图标 → Troubleshoot → Show Logs,重点搜索dns、network、bridge相关报错
解决方案
1. 排除VPN干扰
- 临时关闭VPN,测试容器间连接是否恢复。若恢复,说明VPN路由/DNS覆盖了Docker设置
- 配置Tunnelblick绕过Docker子网流量:
打开VPN配置编辑页面 → Advanced选项卡,添加Docker子网到Do Not Route列表(可通过docker network inspect crypto-gateway获取具体子网,通常为172.xx.0.0/16)
2. 重置Docker网络
清理异常的网络配置:
# 停止所有容器 docker stop $(docker ps -aq) # 清理无用网络、容器、卷 docker network prune -f docker system prune -f --volumes # 重启Docker Desktop
之后重新启动Compose项目
3. 强制指定容器DNS
在docker-compose.yml的web服务中添加DNS配置,强制使用Docker内部DNS:
web: # 原有配置不变 dns: - 127.0.0.11 - 8.8.8.8
4. 降级Docker Desktop版本
问题可能源于新版本对M2芯片的适配问题,尝试降级到之前稳定运行的版本(如4.18.x系列)
5. 优化容器启动顺序
添加依赖关系确保服务就绪后再启动web容器:
web: # 原有配置不变 depends_on: - mysql - vault - rabbitmq
若需要等待服务完全就绪,可在web容器启动脚本中加入wait-for-it等工具的等待逻辑(如./wait-for-it.sh crypto-gateway-db:3306 -- npm start)
补充排查点
- 关闭Mac系统设置中
Wi-Fi -> Advanced -> DNS的Search domains,避免本地DNS干扰 - 检查Mac内置防火墙是否阻止了Docker容器间的通信
内容的提问来源于stack exchange,提问作者ZhukV
相关产品推荐
相关产品推荐

