Laravel 项目如何使用 Docker Compose 编排部署到 Linux 服务器

文章导读
使用 Docker Compose v2.24.7 或更高版本配合 Docker Engine 20.10+ 可实现 Laravel 项目的稳定容器化部署,官方二进制安装方式比 pip 安装减少 90% 以上的依赖错误。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

Laravel 项目如何使用 Docker Compose 编排部署到 Linux 服务器

核心结论:使用 Docker Compose v2.24.7 或更高版本配合 Docker Engine 20.10+ 可实现 Laravel 项目的稳定容器化部署,官方二进制安装方式比 pip 安装减少 90% 以上的依赖错误。

原因分析

Laravel 项目容器化部署的核心挑战在于多服务协调。根据 2026 年 4 月 6 日的技术资料,docker-compose.yml 配置错误是导致部署失败的主要原因,其中 YAML 缩进错误、depends_on 逻辑误解、卷清理不当占故障案例的 70% 以上。关键问题包括:

  • 版本兼容性:Compose v1(如 1.29.2)只支持到 version: '3.9',已停止维护;Compose v2+ 与 Docker Engine 20.10+ 兼容性最好
  • 服务依赖时序:depends_on 只控制启动顺序,不等待依赖服务"就绪",如 db 容器启动了但 MySQL 还没完成初始化,web 就可能连不上
  • 安装方式风险:pip 安装的 docker-compose 常缺依赖(如 docker-py 版本不匹配),运行时会报"ImportError: cannot import name 'DockerClient'"

解决方案

步骤一:安装 Docker 和 Docker Compose

推荐方案(官方二进制安装):

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

验证输出应为"Docker Compose version v2.24.7"。注意路径必须是/usr/local/bin/,不能放/usr/bin/(某些发行版里该目录受 snap 或包管理器保护)。

备选方案(系统包管理器):

在 Debian 或 Ubuntu 上:sudo apt update && sudo apt install docker-compose-plugin -y

在 Fedora 上:sudo dnf install docker-compose-plugins -y

Laravel 项目如何使用 Docker Compose 编排部署到 Linux 服务器

验证:docker compose version(注意 v2+ 使用 docker compose 而非 docker-compose)

步骤二:创建 Dockerfile

在 Laravel 项目根目录下创建 Dockerfile,内容如下:

FROM php:7.4-fpm
RUN docker-php-ext-install pdo_mysql mbstring xml zip opcache
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY . /var/www/html
RUN composer install --no-interaction --prefer-dist --optimize-autoloader
RUN chown -R www-data:www-data /var/www/html
EXPOSE 9000
CMD ["php-fpm"]

关键点:使用 php:7.4-fpm 作为基础镜像,安装 pdo_mysql、mbstring、xml、zip、opcache 扩展,设置 www-data 用户权限。

步骤三:创建 docker-compose.yml

在项目根目录创建 docker-compose.yml(注意必须用小写 yml 或 yaml 后缀,大小写敏感):

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    restart: unless-stopped
    volumes:
      - ./:/var/www/html
    networks:
      - laravel
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    networks:
      - laravel
  db:
    image: mysql:8.0
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - laravel
networks:
  laravel:
    driver: bridge
volumes:
  mysql_data:

注意:ports 必须是字符串数组 ["80:80"],写成 80:80(无引号)会解析失败。

步骤四:创建 Nginx 配置文件

创建 nginx.conf 文件:

Laravel 项目如何使用 Docker Compose 编排部署到 Linux 服务器
server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.ht {
        deny all;
    }
}

关键点:fastcgi_pass 使用服务名 app:9000,服务间直接用服务名当 hostname,不用配 IP。

步骤五:启动服务

docker-compose up -d
docker-compose ps

若容器状态显示 Exit 1 或 Restarting,说明容器启动失败,需查看日志:docker-compose logs -f <service_name>

注意事项

  • 常见报错 1:执行 docker-compose --version 报错"command not found",基本是没装、路径不对或权限缺失。解决方案:确认文件在/usr/local/bin/且已加执行权限
  • 常见报错 2:ERROR: Version in "./docker-compose.yml" is unsupported,说明 docker-compose 版本太低,不支持 version: '3.8' 这类高版本字段。解决方案:升级 docker-compose 到 v2.24.7+
  • 常见报错 3:YAML 缩进错误。YAML 对空格极其敏感,Tab 键、多缩少缩、冒号后缺空格都会让 docker-compose config 直接报错退出。解决方案:统一用 2 个空格缩进,禁用 Tab 键
  • 常见报错 4:容器启动后立即退出,日志显示"exec user process caused: exec format error"(架构不匹配)或"no such file or directory"(入口脚本路径错)。解决方案:检查基础镜像架构与宿主机是否匹配
  • 常见报错 5:ERROR: No such file or directory: docker-compose.yml。配置文件必须命名为 docker-compose.yml 或 docker-compose.yaml 且位于当前目录,名字写成 compose.yml 或放在子目录都会报错
  • 文件权限:Laravel 的 storage 和 bootstrap/cache 目录需要可写权限,在 Dockerfile 中添加 RUN chown -R www-data:www-data /var/www/html
  • 网络互通:服务间通信靠默认 default 网络,其他容器里写 redis:6379 或 mysql:3306 即可,不用配 IP

参考来源

来源:GitHub Docker Compose Releases - Docker Compose v2.24.7/v2.36.2 发布页面

来源:DigitalOcean - How To Install and Set Up Laravel with Docker Compose on Ubuntu 22.04(2025 年 12 月 8 日发布)

来源:CSDN 技术社区 - Linux 如何使用 Docker Compose 编排详解(2026 年 4 月 6 日资料)

来源:知乎专栏 - Linux 配置多容器编排速成指南(2026 年 3 月 14 日资料)