docker compose exec -T在Cron中执行失败,报“unknown shorthand flag: 'T'”错
解决Cron中执行
docker compose exec -T报错的问题 问题原因
核心问题是Cron环境中使用的Docker版本不支持docker compose集成式子命令。docker compose是Docker 20.10.0及以上版本才引入的新语法,将Compose功能直接集成到Docker CLI中。如果Cron调用的Docker版本低于这个阈值,它会把compose当成未知的Docker命令参数,进而将后续的-T识别为非法短选项,最终触发报错。
解决方案
1. 检查并升级Docker版本
先验证Cron环境中的Docker版本:
- 创建临时Cron任务执行版本检查:
* * * * * /usr/bin/docker --version > /tmp/docker_version.log 2>&1 * * * * * /usr/bin/docker compose version > /tmp/docker_compose_version.log 2>&1
等待1分钟后查看日志文件,若Docker版本低于20.10.0,或docker compose命令报错,就需要升级Docker到支持集成式Compose的版本。
2. 改用传统docker-compose命令(兼容旧版本)
如果暂时无法升级Docker,可切换到旧版独立的docker-compose命令:
修改备份脚本中的命令为:
cd /home/ubuntu/my_project/ \ && /usr/bin/docker-compose exec -T db pg_dump -U postgres > $BACKUP_FILE
若系统中没有docker-compose,可通过包管理器安装(比如Ubuntu下执行apt install docker-compose)。
3. 补全脚本环境变量
即使PATH一致,Cron的环境变量仍可能比终端少。可在脚本开头手动指定必要变量,避免隐性错误:
#!/bin/bash export PATH="/usr/bin:/bin:$PATH" export BACKUP_FILE="/path/to/your/backup.sql" # 确保备份路径正确定义 cd /home/ubuntu/my_project/ \ && /usr/bin/docker compose exec -T db pg_dump -U postgres > $BACKUP_FILE
内容的提问来源于stack exchange,提问作者kyuden
相关产品推荐
相关产品推荐

