当Docker容器端口映射到主机后无法访问时,可以按照以下步骤进行排查:
# 确认容器正在运行
docker ps
# 查看容器的端口映射情况
docker port <container_name_or_id>
# 从容器内部测试服务是否正常
docker exec -it <container_name_or_id> curl localhost:<port>
# 从主机测试容器IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>
curl <container_ip>:<port>
# 查看防火墙状态
sudo ufw status # Ubuntu
sudo firewall-cmd --state # CentOS
# 临时关闭防火墙测试
sudo ufw disable # Ubuntu
sudo systemctl stop firewalld # CentOS
# 查看SELinux状态
getenforce
# 临时设置为宽松模式测试
sudo setenforce 0
# 查看容器的网络模式
docker inspect -f '{{.HostConfig.NetworkMode}}' <container_name_or_id>
# 尝试使用host网络模式测试
docker run --network host ...
明确指定主机IP:
docker run -p 127.0.0.1:8080:80 ...
检查绑定IP:
0.0.0.0
而不是127.0.0.1
检查端口冲突:
sudo netstat -tulnp | grep <port>
重启Docker服务:
sudo systemctl restart docker
检查Docker日志:
docker logs <container_name_or_id>
journalctl -u docker.service
# 使用tcpdump抓包分析
sudo tcpdump -i docker0 port <port>
# 检查路由表
ip route
# 检查NAT规则
sudo iptables -t nat -L -n -v
如果以上步骤仍无法解决问题,可能需要检查: - 主机网络配置 - Docker版本是否过旧 - 特定应用程序的配置问题 - 云服务提供商的网络安全组设置
希望这些排查步骤能帮助您解决Docker端口映射访问问题!