问题描述: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: nginx
image: docker.cnb.cool/sre-johp/dockerhub/nginx:1.26.2
restart: always
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
deploy:
resources:
limits:
memory: 1000M
reservations:
memory: 1000M
解决方案:( 请自行判断使用,以下命令可能会影响其他正常规则使用!!!
# 清除主机防火墙规则;(慎用,个人情况不一样
iptables -F
# 重启docker
systemctl restart docker
or
# /etc/docker/daemon.json中加入以下内容;(建议方案,需要手动维护iptables规则
{
"iptables": false
}
# 重启docker
systemctl restart docker
问题原因:
- Docker 在启动时修改了防火墙规则,导致端口映射不正确或被阻塞。