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

自定义DDEV Provider执行ddev pull拉取数据时报错如何解决?

问题原因及解决方法

核心报错原因

1. 特殊字符未正确转义

你密码中包含$符号,在双引号包裹的SSH命令执行过程中,Bash会将$开头的内容识别为变量尝试解析,你遇到的bash: 03: command not found就是密码中的$03被错误解析、Bash尝试执行03命令导致的。

2. MySQLdump语法错误

最早的配置中-p ${DB_PASSWORD}写法错误,-p参数和密码之间不能有空格,否则MySQLdump会将后面的密码识别为数据库名,执行报错。

3. 命令笔误

你最早配置中scp命令末尾多了多余的.字符,导致路径识别错误,也会触发目录操作相关报错。另外你无需手动创建.downloads目录,DDEV执行ddev pull时会自动生成该目录。


修正后的配置参考

environment_variables:
  DB_NAME: db_name
  DB_USER: db_user
  # 密码中的$需要加反斜杠转义,外层保留单引号包裹
  DB_PASSWORD: 'Password\$'
  HOST_IP: 10.10.10.10
  SSH_USERNAME: username
  SSH_PORT: 21

auth_command:
  command: |
    ssh-add -l >/dev/null || ( echo "Please 'ddev auth ssh' before running this command." && exit 1 )

db_pull_command:
  command: |
    # 直接通过管道将远程备份输出到本地,无需生成远程临时文件
    ssh -p ${SSH_PORT} ${SSH_USERNAME}@${HOST_IP} "mysqldump -h 127.0.0.1 --user=${DB_USER} --password='${DB_PASSWORD}' ${DB_NAME}" | gzip > /var/www/html/.ddev/.downloads/db.sql.gz

files_pull_command:
  command: |
    # 用rsync替代scp实现增量同步,速度更快
    rsync -avz -e "ssh -p ${SSH_PORT}" ${SSH_USERNAME}@${HOST_IP}:/path/to/public/fileadmin/user_upload/ /var/www/html/.ddev/.downloads/files/

额外优化建议

  • 优先使用--user、--password写法代替简写的-u、-p,避免空格导致的语法歧义问题
  • 如果变量依然无法正常识别,可以将环境变量添加到项目.ddev/config.yaml的web_environment配置项中,优先级高于provider内定义的变量
  • 确认远程服务器SSH用户对/tmp目录有读写权限,避免临时文件生成失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:06