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

Laravel 9 Docker环境下Spatie备份包dump_binary_path配置问题

解决Laravel + Docker环境下spatie/laravel-backup调用mysqldump失败的问题

错误原因

执行docker compose exec php php artisan backup:run时,备份命令是在PHP容器内运行的,但mysqldump实际存在于MySQL容器中,PHP容器默认未安装mysql-client工具包,因此找不到/usr/bin/mysqldump路径,触发报错sh: 1: /usr/bin/mysqldump: not found。

解决方案

提供两种可行方案,按需选择:

方法一:在PHP容器中安装mysql-client(推荐简单场景)

直接在PHP容器内安装包含mysqldump的mysql-client包,让PHP容器能直接调用本地的mysqldump:

  1. 修改PHP服务的Dockerfile(无Dockerfile则新建):
# 基于你的PHP镜像,示例为php:8.1-fpm
FROM php:8.1-fpm

# 安装mysql-client及依赖
RUN apt-get update \
    && apt-get install -y --no-install-recommends mysql-client \
    && rm -rf /var/lib/apt/lists/*

# 后续添加你的Laravel依赖安装命令(如扩展安装、composer操作等)
  1. 重构PHP镜像并重启容器:
docker compose build php
docker compose up -d php
  1. 保留config/database.php中的dump配置不变:
'dump' => [
    'dump_binary_path' => '/usr/bin',
    'use_single_transaction',
    'timeout' => 60 * 5, 
],

方法二:通过Docker exec调用MySQL容器内的mysqldump(适合轻量场景)

若不想增大PHP镜像体积,可让spatie/laravel-backup通过docker exec直接调用MySQL容器内的mysqldump:

  1. 修改config/database.php中的mysql dump配置,添加自定义command:
'mysql' => [
    // 其余配置保持不变
    'dump' => [
        'dump_binary_path' => '', // 清空或删除该配置
        'command' => 'docker exec mysql /usr/bin/mysqldump', // 替换为你的MySQL容器名
        'use_single_transaction',
        'timeout' => 60 * 5, 
    ],
    // 其余配置保持不变
],
  1. 给PHP容器添加Docker权限:
    在docker-compose.yml的PHP服务中挂载宿主机的docker.sock,让PHP容器能执行docker命令:
php:
    // 其余配置保持不变
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        // 你的其他挂载路径
  1. 重启PHP容器:
docker compose restart php

验证

执行备份命令测试是否正常:

docker compose exec php php artisan backup:run

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:50:26