问题描述:docker-compose暴露端口,但其他主机无法访问问题。
排障思路:
- 执行命令:ss -antlp | grep 80,发现端口正常监听0.0.0.0:80(ps:如果是127.0.0.1:80则只能本机访问
- 同区域网段服务器执行telnet又不通。
- 本机执行curl -v localhost能正常显示nginx页面。
- 重启该服务 docker-compose restart nginx后,telnet测试结果还是不行。
- 执行systemctl status firewall,查看防火墙状态为关闭。
- 检查 SELinux 配置为关闭
version: '3'services:nginx:container_name: nginximage: docker.cnb.cool/sre-johp/dockerhub/nginx:1.26.2restart: alwaysports:- "80:80"volumes:- ./nginx.conf:/etc/nginx/nginx.conf:rodeploy:resources:limits:memory: 1000Mreservations:memory: 1000M
解决方案:( 请自行判断使用,以下命令可能会影响其他正常规则使用!!!
# 清除主机防火墙规则;(慎用,个人情况不一样
iptables -F # 重启docker
systemctl restart dockeror# /etc/docker/daemon.json中加入以下内容;(建议方案,需要手动维护iptables规则
{"iptables": false
}# 重启docker
systemctl restart docker
问题原因:
- Docker 在启动时修改了防火墙规则,导致端口映射不正确或被阻塞。