Docker+Nginx环境下无法访问Grafana与pgAdmin的问题排查
问题排查步骤
你遇到的无Nginx头的404,说明请求没经过主机Nginx(因为你是直接访问端口,而非走主机Nginx代理),问题大概率出在Docker端口映射、容器状态、防火墙/安全组这几个环节,按以下顺序排查:
1. 核对Docker端口映射配置
检查docker-compose.yml和docker-compose.override.yml中Grafana、pgAdmin的ports字段是否正确:
- Grafana默认容器内端口是
3000,要映射到主机3090,配置应为:
若写成ports: - "3090:3000"3090:3090,容器内未开3090端口,自然返回404。 - pgAdmin默认容器内端口是
80,映射到主机5050的配置应为:
别把容器内端口写成5050,pgAdmin镜像默认不监听该端口。ports: - "5050:80"
执行docker-compose ps命令,查看容器端口映射状态,确认Grafana、pgAdmin的端口列显示类似:
- Grafana:
0.0.0.0:3090->3000/tcp - pgAdmin:
0.0.0.0:5050->80/tcp
若显示0.0.0.0:3090->3090/tcp或端口列为空,说明映射配置错误。
2. 确认容器是否正常运行并监听端口
- 用
docker-compose logs grafana和docker-compose logs pgadmin查看容器启动日志,排查是否有报错(比如配置文件错误、权限问题)。 - 进入容器内部检查端口监听:
针对Grafana:
针对pgAdmin:docker-compose exec grafana netstat -tulpn | grep 3000
若无输出,说明容器内服务未正常启动,无法响应请求。docker-compose exec pgadmin netstat -tulpn | grep 80
3. 检查主机防火墙/安全组
- 若使用云服务器,先去控制台检查安全组是否开放
3090、5050端口,Prometheus的9090能通不代表其他端口已开放。 - 本地主机的话,检查防火墙规则:
Linux用ufw status确认是否允许3090、5050端口的入站请求;Windows通过防火墙高级设置确认端口放行。
4. 排查主机端口占用
检查主机上3090、5050端口是否被其他进程占用:
# Linux/macOS lsof -i :3090 lsof -i :5050 # Windows netstat -ano | findstr :3090
若有其他进程占用这些端口,Docker无法绑定,访问时会返回主机的404(无服务监听该端口)。
内容的提问来源于stack exchange,提问作者s0mbre
相关产品推荐
相关产品推荐

