当你在 Docker 中运行 Nginx 但无法访问时,可以按照以下步骤进行排查和解决:
docker ps
确认 Nginx 容器是否正常运行(STATUS 应为 "Up")。
确保你正确映射了端口:
docker run -d -p 80:80 nginx
80
是主机端口80
是容器内部 Nginx 服务端口确保主机防火墙允许外部访问:
# Ubuntu/Debian
sudo ufw allow 80/tcp
# CentOS/RHEL
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
查看容器日志以获取错误信息:
docker logs <container_name_or_id>
进入容器内部检查 Nginx 是否正常运行:
docker exec -it <container_name_or_id> bash
在容器内:
# 检查 Nginx 进程
ps aux | grep nginx
# 检查 Nginx 配置
nginx -t
# 检查默认页面是否存在
cat /usr/share/nginx/html/index.html
确保主机 80 端口没有被其他服务占用:
sudo netstat -tulnp | grep :80
在容器内部测试 Nginx 是否响应:
docker exec <container_name_or_id> curl localhost
确保容器使用正确的网络模式:
docker inspect <container_name_or_id> | grep NetworkMode
排除网络配置问题:
docker run -d --network host nginx
然后尝试通过 localhost
或主机 IP 访问。
如果使用 SELinux,可能需要调整策略:
sudo setenforce 0
(临时禁用 SELinux 进行测试)
-p
参数正确设置如果以上步骤仍无法解决问题,请提供更详细的错误信息以便进一步诊断。