Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Docker&x2B;Crontab:从服务名称中查找容器ID以在Crontab中使用_Postgresql_Docker_Cron - Fatal编程技术网

Postgresql Docker&x2B;Crontab:从服务名称中查找容器ID以在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

上下文是我正在尝试设置一个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-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 -