当使用Docker搭建的Web服务端口不通时,可以按照以下步骤进行排查和解决:
docker ps -a
确认容器是否正在运行(STATUS为"Up")。如果容器未运行,尝试启动并查看日志:
docker start <容器名/ID>
docker logs <容器名/ID>
检查容器是否正确映射了端口:
docker inspect <容器名/ID> | grep -i port
或查看运行时的端口映射:
docker port <容器名/ID>
确认容器使用的网络模式:
docker inspect <容器名/ID> | grep -i networkmode
如果是bridge
模式,确保主机端口未被占用:
netstat -tuln | grep <主机端口>
进入容器内部测试服务是否正常:
docker exec -it <容器名/ID> /bin/bash
curl localhost:<容器端口>
如果容器内访问正常,但外部无法访问,可能是端口映射或防火墙问题。
Linux主机:
sudo ufw status
sudo ufw allow <端口>/tcp
Windows主机:检查Windows Defender防火墙设置
如果启用了SELinux,可能需要调整策略:
sudo setsebool -P httpd_can_network_connect 1
确认启动命令是否正确映射端口,例如:
docker run -d -p 8080:80 --name myweb nginx
其中8080
是主机端口,80
是容器端口。
如果bridge模式有问题,可以尝试host模式:
docker run --network host ...
确认Web应用配置监听了正确的IP和端口(通常是0.0.0.0而不是127.0.0.1)。
确保主机本身可以访问:
curl localhost:<主机端口>
如果以上步骤都检查无误,问题可能出在更底层的网络配置或Docker安装本身,考虑重启Docker服务或主机系统。