Docker-Docker compose-postgres图像

Docker-Docker compose-postgres图像,docker,docker-compose,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 不管什么

我正在使用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
。这是一个小问题,因为很难记住要做什么,如果我(或其他人)忘记了这一点,就不会进行备份

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


如果您希望使docker容器尽可能独立于其他服务,我将非常感谢您对解决方案的任何建议。我建议您不要在容器中运行cronjob,而是在主机上运行它,这样即使容器重新启动(自动或手动)它也会运行


如果你真的觉得有必要,我会以postgres镜像为基础构建一个新镜像,然后从那里添加cron,这样一来,它从一开始就在容器中,不需要任何额外的脚本。甚至创建另一个映像来调用cronjob并通过docker网络连接。

扩展@Jite的答案,您可以使用
--host
在不同的容器中远程运行
pg_dump


例如,这提供了一个具有
psql
客户端和转储/恢复实用程序的最小环境

您可以提供您的
dockerfile
或至少让我们知道您使用的基本映像(ubuntu/centos)?@mchawre我使用了postgres:latestI我希望容器的整个管理功能只需执行
docker compose up
docker compose down
,因此如果我休假、退出或死亡,如果出于某种原因应用程序被移动到另一个VM,只要容器已启动且不需要其他管理员阅读文档,则仍将进行备份。然后,我建议添加一个cron作业容器,以便在撰写文件中与其他容器并行运行。谢谢,我很喜欢这样。我想在docker compose文件中演示整个功能