升级系统后Docker发布端口无法连接,如何通过发布端口正常访问容器?
解决步骤
按优先级依次排查:
- 检查内核IP转发配置
系统升级可能会重置sysctl配置,运行命令查看当前状态:
如果输出为sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 0,说明转发未开启,编辑/etc/sysctl.conf文件,取消net.ipv4.ip_forward=1行的注释,执行sudo sysctl -p生效后,重启Docker服务:
再测试端口连接是否恢复。sudo systemctl restart docker - 检查Docker iptables规则完整性
系统升级大概率会清空原有iptables规则,Docker依赖的端口转发规则丢失会导致映射失效,执行以下操作重建规则:
Docker启动时会自动添加所需的转发规则,完成后测试连接。sudo systemctl stop docker sudo iptables -F FORWARD sudo systemctl start docker - 排查localhost ipv6解析优先级问题
Linux Mint 20默认会将localhost优先解析为ipv6地址::1,但默认的端口映射仅监听ipv4的0.0.0.0,会导致连接失败。可以先用127.0.0.1替代localhost测试连接,如果能连通即可确认是该问题。
两种修复方案:- 启动容器时同时绑定ipv4和ipv6:
docker run --rm -d -p [::]:27017:27017 -p 0.0.0.0:27017:27017 mongo:3.6- 修改系统地址优先级,让ipv4优先:编辑
/etc/gai.conf,取消precedence ::ffff:0:0/96 100行的注释,保存后立即生效。
- 解决iptables与nftables兼容问题
Ubuntu 20.04默认使用nftables替代传统iptables,旧版Docker生成的iptables规则无法被识别,执行命令切换到iptables legacy模式:
选择sudo update-alternatives --config iptables/usr/sbin/iptables-legacy对应的选项,重启Docker服务后测试连接。
内容的提问来源于stack exchange,提问作者user1347648
相关产品推荐
相关产品推荐

