GCP部署Docker Stack后无法访问网页的问题求助
Docker Swarm部署后网页访问超时(ERR_CONNECTION_TIMED_OUT)排查与解决
核心问题1:Nginx未配置反向代理至PHP服务
你的mynginx服务使用默认Nginx镜像,无任何反向代理规则转发请求到myphp服务。默认Nginx仅返回静态欢迎页,若需PHP处理请求,必须自定义配置:
- 本地创建
nginx.conf配置文件,示例内容:
server { listen 80; server_name localhost; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass myphp:80; # php:7.4-apache默认监听80端口,而非9000 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
- 修改
docker-compose.yml中mynginx服务的volumes配置,挂载自定义配置:
mynginx: image: nginx:latest depends_on: - myphp ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf # 添加该行挂载配置 - ./src:/var/www/html # 同步PHP代码到Nginx容器,确保静态文件可访问 deploy: mode: replicated replicas: 2 placement: constraints: - node.role == manager networks: - mynet
核心问题2:PHP服务端口映射错误
php:7.4-apache镜像默认运行Apache服务,监听80端口(9000是PHP-FPM的默认端口,此镜像未启用)。当前"9000:9000"的端口映射无效,且Swarm内部服务通过网络互通,无需暴露该端口到主机:
修改myphp服务配置,移除无效端口映射:
myphp: image: php:7.4-apache depends_on: - mysql # 移除ports: - "9000:9000" volumes: - ./src:/var/www/html deploy: placement: constraints: - node.role == manager networks: - mynet
额外排查点:主机端口与防火墙设置
确认主机80、8082端口已开放(仅开放Swarm集群需要的7946/4789不够):
- ufw防火墙:
sudo ufw allow 80/tcp && sudo ufw allow 8082/tcp - firewalld:
sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --add-port=8082/tcp --permanent && sudo firewall-cmd --reload
- ufw防火墙:
检查主机是否有其他进程占用80端口:
sudo lsof -i :80,若有冲突,修改Nginx端口映射(如"8081:80")。
次要问题:Visualizer服务启动失败
服务列表中test_visualizer副本数为0/1,任务显示Starting,原因是挂载/var/run/docker.sock的权限问题,添加用户权限配置即可解决:
visualizer: image: dockersamples/visualizer:latest ports: - "8080:80" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] user: "0" # 添加该行以root权限运行
验证步骤
- 重新部署栈:
docker stack deploy -c docker-compose.yml test - 查看服务状态:
docker stack services test,确保所有服务副本数正常 - 查看Nginx容器日志:
docker logs <nginx-container-id>,确认无配置错误 - 尝试访问主机IP的80端口(业务页面)和8082端口(phpMyAdmin),检查响应状态
内容的提问来源于stack exchange,提问作者runxing Li
相关产品推荐
相关产品推荐

