You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP部署Docker Stack后无法访问网页的问题求助

Docker Swarm部署后网页访问超时(ERR_CONNECTION_TIMED_OUT)排查与解决

核心问题1:Nginx未配置反向代理至PHP服务

你的mynginx服务使用默认Nginx镜像,无任何反向代理规则转发请求到myphp服务。默认Nginx仅返回静态欢迎页,若需PHP处理请求,必须自定义配置:

  1. 本地创建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;
    }
}
  1. 修改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

额外排查点:主机端口与防火墙设置

  1. 确认主机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
  2. 检查主机是否有其他进程占用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权限运行

验证步骤

  1. 重新部署栈:docker stack deploy -c docker-compose.yml test
  2. 查看服务状态:docker stack services test,确保所有服务副本数正常
  3. 查看Nginx容器日志:docker logs <nginx-container-id>,确认无配置错误
  4. 尝试访问主机IP的80端口(业务页面)和8082端口(phpMyAdmin),检查响应状态

内容的提问来源于stack exchange,提问作者runxing Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:30:50