从crontab运行“docker run”

26

我尝试自动备份运行在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

我的crontab看起来像这样:

0 4 * * * /path/to/script.sh

当我手动执行这个脚本时,它可以正常工作,并且我也尝试使用cron(调试用的是 * * * * *)执行它,同样可以执行成功。

但我无法让cron和此脚本一起正常工作。到目前为止,我尝试了以下操作:

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

当从cron执行时,$CONTAINER 包含正确的docker ID,cron.log和output.log已经被创建,但是都为空。

有什么建议吗?

2个回答

27
无法在cron中使用 docker run -it --link [...] 命令,现在我改用 docker run --link [...] 命令。

25
为了阐述Martin的答案,-it-i -t的简写,即在终端上交互式地运行伪终端,因此在cronjob中运行时不需要它。
如果命令适合自动化,则不需要-it,因此删除它应该可以让您从cron job中运行docker。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接