Docker-docker-compose-Postgres图片

时间:2019-06-19 11:20:33

标签: docker docker-compose

我正在使用postgres:latest映像,并使用以下命令创建备份

pg_dump postgres -U postgres > /docker-entrypoint-initdb.d/backups/redmine-$(date +%Y-%m-%d-%H-%M).sql

,它使用crontab定期运行

*/30 * * * * /docker-entrypoint-initdb.d/backup.sh

但是,有时候我可能需要跑步

docker-compose down/up

出于任何原因

问题 每当我重新启动容器时,我总是需要手动运行/etc/init.d/cron start。这有点问题,因为很难记住要执行的操作,而且如果我(或其他任何人)忘记了此操作,将无法进行备份

根据文档,*.sql中以*.sh/docker-entrypoint-initdb.d/结尾的脚本在容器启动时运行(确实如此) 但是,如果我将/etc/init.d/cron start放在可执行文件.sh中,则该文件中的其他命令都会执行,并且我已经验证了这一点。但是cron服务无法启动,可能是因为可执行文件中的/etc/init.d/cron start无法成功执行

如果有解决方案的建议,我将不胜感激

2 个答案:

答案 0 :(得分:2)

您将希望使docker容器尽可能独立于其他服务,我建议您不要在容器中运行cronjob,而是在主机上运行它,这样即使重新启动容器,它也将运行(自动或手动天气)。

如果您真的很需要它,我将以postgres图像为基础构建一个新图像,然后从那里开始添加cron,这样它就可以从一开始就位于容器中,而无需任何其他脚本。甚至创建另一个映像只是为了调用cronjob并通过docker网络连接。

答案 1 :(得分:1)

扩展@Jite的答案,您可以使用pg_dump option

在另一个容器中远程运行--host

例如,此image通过psql客户端和转储/还原实用程序提供了一个最小的环境