Postgresql Docker&x2B;Crontab:从服务名称中查找容器ID以在Crontab中使用
上下文是我正在尝试设置一个cron作业来备份postgres docker容器中的数据库。我使用的crontab行是:Postgresql Docker&x2B;Crontab:从服务名称中查找容器ID以在Crontab中使用,postgresql,docker,cron,Postgresql,Docker,Cron,上下文是我正在尝试设置一个cron作业来备份postgres docker容器中的数据库。我使用的crontab行是: 45 1 * * * docker exec e2fa9f0adbe0 pg_dump -Z 9 -U pguser -d pgdb | curl -u ftpuser:ftppwd ftp.mydomain.com/my-db-backups/db-backup_`date '+\%Y-\%m-\%d_\%H-\%M-\%S'`.sql.gz --ftp-create-dir
45 1 * * * docker exec e2fa9f0adbe0 pg_dump -Z 9 -U pguser -d pgdb | curl -u ftpuser:ftppwd ftp.mydomain.com/my-db-backups/db-backup_`date '+\%Y-\%m-\%d_\%H-\%M-\%S'`.sql.gz --ftp-create-dirs -T -
它很好用。但我正试图改进它,因为目前容器ID e2fa9f0adbe0是硬编码到crontab中的,因此如果重新启动容器所在的服务,它将中断,因此容器将在新ID下重新出现。另一方面,服务名称将始终相同
那么有没有一种方法可以改变上面的cron命令来从服务名称中提取容器ID(比如说
my postgres service
)?您可以使用以下命令从名称中获取ID:
docker ps-aqf“name=mypostgres服务”
以下是有关上述选项的更多详细信息:
docker ps-h
我试图编辑Olmpc的答案,使其更完整(以便我可以将其标记为已接受),但我的编辑被拒绝(谢谢)。因此,我将发布我自己的答案:
为了回答实际问题,可以按如下方式更改cron命令,使其基于服务名称(固定)而不是容器ID(可能会更改):
这是很好的工作。注意:它依赖于只有一个与服务关联的容器,因此,docker ps-qf name=my postgres service
只返回一个容器ID
45 1 * * * docker exec `docker ps -qf name=my-postgres-service` pg_dump -Z 9 -U pguser -d pgdb | curl -u ftpuser:ftppwd ftp.mydomain.com/my-db-backups/db-backup_`date '+\%Y-\%m-\%d_\%H-\%M-\%S'`.sql.gz --ftp-create-dirs -T -