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

能否运行多个Laravel等PHP应用容器并接入单一Web服务与数据库容器?

可以实现,这是多PHP项目Docker部署的标准方案之一

这种架构的优势是项目之间完全隔离、依赖不冲突,同时公共服务复用减少资源占用,后期迭代单个项目也不会影响其他在线业务。

核心架构逻辑

  • 所有容器加入同一个Docker自定义桥接网络,容器之间可以直接通过容器名互相通信,无需暴露非必要端口到公网,安全性更高
  • 统一的Web服务容器(通常用Nginx/Caddy)作为流量入口,为每个PHP应用配置独立的站点规则,匹配对应域名/路径前缀,将PHP请求转发到对应应用容器的9000端口(PHP-FPM默认端口),静态资源直接由Web服务读取返回
  • 统一的数据库容器(常用MySQL/MariaDB/PostgreSQL)可以为每个应用创建独立的数据库、独立的访问账号,数据互相隔离,不会出现跨应用读写权限问题
  • 每个PHP应用单独打包为独立容器:Laravel、WordPress、原生PHP的依赖、PHP版本要求都可能不同,单独打包完全避免依赖冲突,单个项目重启、更新、回滚都不会影响其他项目

简化版docker-compose配置参考

version: '3.8'
# 统一网络,所有服务接入该网络
networks:
  php-apps-network:
    driver: bridge

# 持久化卷配置
volumes:
  mysql-data: # 数据库数据持久化,避免容器删除丢失数据
  wp-root: # WordPress项目根目录,共享给Nginx读静态资源
  laravel-public: # Laravel项目public目录,共享给Nginx读静态资源
  native-php-root: # 原生PHP项目根目录,共享给Nginx读静态资源

services:
  # 统一Web服务
  nginx:
    image: nginx:stable-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/sites:/etc/nginx/conf.d # 本地存放各站点的Nginx配置文件
      - wp-root:/var/www/wordpress
      - laravel-public:/var/www/laravel/public
      - native-php-root:/var/www/native
    networks:
      - php-apps-network
    depends_on:
      - wordpress
      - laravel
      - native-php

  # 统一数据库服务
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 替换为你自己的root密码
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - php-apps-network
    # 无需映射3306端口到宿主机,除非有本地工具连接数据库的需求

  # WordPress应用容器
  wordpress:
    image: wordpress:php8.2-fpm-alpine
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: 替换为WordPress数据库密码
    volumes:
      - wp-root:/var/www/html
    networks:
      - php-apps-network
    depends_on:
      - mysql

  # Laravel应用容器
  laravel:
    build: ./laravel # 替换为你本地Laravel项目的Dockerfile路径
    volumes:
      - laravel-public:/var/www/laravel/public
    environment:
      DB_HOST: mysql:3306
      DB_DATABASE: laravel_db
      DB_USERNAME: laravel_user
      DB_PASSWORD: 替换为Laravel数据库密码
    networks:
      - php-apps-network
    depends_on:
      - mysql

  # 原生PHP应用容器
  native-php:
    build: ./native-php # 替换为你本地原生PHP项目的Dockerfile路径
    volumes:
      - native-php-root:/var/www/native
    environment:
      DB_HOST: mysql:3306
      DB_DATABASE: native_db
      DB_USERNAME: native_user
      DB_PASSWORD: 替换为原生PHP应用数据库密码
    networks:
      - php-apps-network
    depends_on:
      - mysql

部署注意事项

  • 提前在数据库容器中为每个应用创建对应的数据库和账号,不要直接用root账号连接业务应用
  • Nginx的站点配置中,PHP请求的转发地址直接写对应应用的容器名即可,比如WordPress站点配置的fastcgi_pass参数填wordpress:9000,无需配置IP
  • 如果不同应用需要不同的PHP版本,直接在对应应用的镜像中安装对应版本的PHP-FPM即可,Web服务侧无需修改配置
  • 静态资源必须通过共享卷的方式让Nginx容器可以读取到,否则会出现静态资源404的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:00