执行 docker run nginx 后,docker ps 显示 Up,浏览器却打不开页面。这种情况别急着重建容器,按下面顺序定位,通常五分钟内能找到根因。
第一步:确认容器真在运行
docker ps -a
如果 STATUS 是 Exited,说明主进程退出,看日志:
docker logs nginx
第二步:查端口映射
常见问题:启动命令没写 -p,或宿主机端口被占用:
docker port nginx netstat -tulnp | grep :80
端口冲突时把宿主机端口改成 8080:
docker run -d -p 8080:80 --name nginx nginx
第三步:看 Nginx 配置
自定义配置里如果写了 listen 127.0.0.1:80;,容器外就访问不到,要改成 listen 80;。进入容器验证:
docker exec nginx nginx -t
第四步:检查防火墙和安全组
Linux 防火墙(ufw/firewalld)或云厂商安全组会拦截端口:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
排查流程
1
查状态
→
2
看日志
→
3
验端口
→
4
检配置
| 状态 | 含义 | 下一步 |
|---|---|---|
| Exited | 主进程退出 | docker logs 看报错 |
| Up 但无端口 | 启动时没加 -p | 重建容器加端口映射 |
| Up 端口正常 | 多半是防火墙/配置 | ufw/nginx -t 排查 |
🚢
-p 80:80
必须显式映射
🌐
0.0.0.0
Nginx 不要绑回环
常见问题
Q:docker run 没报错,就是 curl localhost 没反应?
先确认端口映射:docker port nginx,再看宿主机 80 是否被其他进程占用。
Q:日志里提示 bind() to 0.0.0.0:80 failed?
端口被占。换成 8080 或停止宿主机上的 Apache/Nginx。
Q:用 docker-compose 启动也一样吗?
一样,重点检查 ports 字段和宿主机端口冲突。
如果这篇帮你定位到了问题,欢迎在 fenij.com 留言贴出你的最终解法,方便后来者参考。