我尝试在docker容器内运行的postgresql数据库中进行自动化(每晚4点)备份。
Jk! krz duh brx itnsl?
我的crontab看起来像这样:
#!/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
当我手动执行它时脚本工作正常,它也从cron执行(我试过* * * * *进行调试)。
我无法弄清楚如何让cron和脚本一起工作。到目前为止我试过了:
0 4 * * * /path/to/script.sh
)* * * * * [...] &>cron.log
的输出 docker exec [...] > output.log
包含正确的docker id,cron.log和output.log已创建但为空。
有什么想法吗?
答案 0 :(得分:4)
从cron运行时无法使用docker run -it --link [...]
- 我现在使用docker run --link [...]
。
答案 1 :(得分:0)
要详细说明马丁的答案,-it
是-i -t
的简写,即在终端(伪TTY)上交互式运行 ,因此不是在cronjob中运行是必需的。
如果该命令适合自动化,那么它是必需的,因此只需删除-it
就可以使您从cron作业中运行docker。