如何添加第二个关联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
相关产品推荐
相关产品推荐

