从crontab运行"docker run"

Mar*_*tin 7 cron docker

我尝试从docker容器内运行的postgresql数据库进行自动化(每晚4点)备份.

#!/bin/sh

CONTAINER=`docker ps|grep name_of_container|awk '{print $1}'`
USER='postgre_user'
PASSWORD='changed'
BUDIR='/some/path/backup/'

docker run -it --link $CONTAINER:db -v $BUDIR:/backup/ -e "PGPASSWORD=$PASSWORD" pg_dump -h db -U $USER -Fc -f /backup/$(date +%Y-%m-%d-%H-%M-%S).dump
Run Code Online (Sandbox Code Playgroud)

我的crontab看起来像这样:

0 4 * * * /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

当我手动执行它时脚本工作正常,它也从cron执行(我试过*****进行调试).

我无法弄清楚如何让cron和脚本一起工作.到目前为止我试过:

  • 将变量写入日志文件
  • 检查来自crontab(* * * * * [...] &>cron.log)的输出
  • 检查docker exec [...] > output.log脚本中的输出

$CONTAINER 包含从cron运行时正确的docker id,cron.log和output.log已创建但为空.

有任何想法吗?

mah*_*off 10

详细说明 Martin 的答案,-it是 的简写-i -t,即在终端(伪 TTY)交互运行,因此不需要在 cronjob 中运行。

如果该命令适用于自动化,-it则不需要,因此删除它应该可以让您从 cron 作业中运行 docker。


Mar*_*tin 7

Can't use docker run -it --link [...] when running from cron - I use docker run --link [...] now.