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

如何添加第二个关联MongoDB的PHP-FPM网站Docker容器?

实现第二个PHP-FPM网站容器的配置方案

1. 添加第二个PHP-FPM服务到docker-compose.yml

直接在原配置里新增php-fpm-second服务,给它配置独立的网站目录数据卷即可——Compose默认会把所有服务放到同一个网络里,不用额外配置网络,内部可直接通过服务名访问:

php-fpm-second:
    image: fpm-dev:latest
    volumes:
      - ./php-fpm-second:/app  # 单独的网站目录,和第一个站点完全隔离

2. 修改Nginx配置,新增第二个站点的Server块

编辑./docker/nginx/nginx.conf,添加新的server块,将请求转发到刚创建的php-fpm-second服务(Docker内部直接用服务名作为主机名即可):

# 保留原有第一个站点的server配置
server {
    listen 8081;
    server_name php-fpm.docker.localhost;
    root /app;
    index index.php;

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

# 新增第二个站点的server配置
server {
    listen 8081;  # 和第一个站点复用同一端口,靠server_name区分请求
    server_name php-fpm-second.docker.localhost;
    root /app-second;  # 对应Nginx容器内挂载的第二个站点目录

    index index.php;

    location ~ \.php$ {
        fastcgi_pass php-fpm-second:9000;  # 指向第二个PHP-FPM服务
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

3. 更新Nginx服务的挂载和Traefik路由标签

修改docker-compose.yml中的Nginx服务,添加第二个站点目录的挂载(让Nginx能访问静态文件),同时给Traefik新增一组路由规则:

nginx:
    image: nginx:latest
    volumes:
      - ./php-fpm:/app
      - ./php-fpm-second:/app-second  # 新增第二个站点目录挂载
      - ./logs/nginx:/var/log/nginx
      - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    labels:
      - "traefik.enable=true"
      # 保留第一个站点的路由规则
      - "traefik.http.routers.php-fpm.rule=Host(`php-fpm.docker.localhost`)"
      - "traefik.http.routers.php-fpm.tls=true"
      - "traefik.http.services.php-fpm.loadbalancer.server.port=8081"
      # 新增第二个站点的路由规则
      - "traefik.http.routers.php-fpm-second.rule=Host(`php-fpm-second.docker.localhost`)"
      - "traefik.http.routers.php-fpm-second.tls=true"
      - "traefik.http.services.php-fpm-second.loadbalancer.server.port=8081"

4. 配置第二个PHP-FPM访问MongoDB

在第二个站点的PHP代码中,直接用服务名mongo作为MongoDB的连接主机,端口使用默认的27017即可,示例代码:

$client = new MongoDB\Client('mongodb://mongo:27017');

同一Docker网络内,内置DNS会自动将服务名mongo解析到对应的MongoDB容器IP,无需使用localhost或宿主机IP。

5. 重启服务生效

执行以下命令重启相关服务,新配置即可生效:

docker-compose up -d --force-recreate nginx php-fpm-second

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:56:35