[英]Dynamically replace current time inside docker-compose command
version: '3.7'
services:
pgdump:
image: postgres:alpine
command: pg_dump -f "backup-`date -u -Iseconds`.pg_restore" $DATABASE_URL
这会产生一个名为
backup-`date -u -Iseconds`.pg_restore
而不是想要的
backup-2021-04-14T16:42:54+00:00.pg_restore
。
我也试过:
command: pg_dump -f backup-`date -u -Iseconds`.pg_restore $DATABASE_URL
command: pg_dump -f "backup-${date -u -Iseconds}.pg_restore" $DATABASE_URL
command: pg_dump -f backup-${date -u -Iseconds}.pg_restore $DATABASE_URL
它们都产生不同的错误。
根据此GitHub 问题,截至 2021 年 4 月,docker-compose 不支持命令替换。
作为我的用例中的一种解决方法,可以使用本机docker run
命令,其中替换起作用或使用.env
文件。
date 命令本身不正确。 尝试自行运行
date -u -Iseconds
echo `date -u -Iseconds`
根据您的命令,我假设您想要自纪元以来的 UTC 秒数? 纪元本身就是UTC。 所以你只需要几秒钟就可以了。 不需要-u
参数。
下面是两个 forms 中的正确命令:
一个。
command: pg_dump -f "backup-`date +'%s'`.pg_restore" $DATABASE_URL
B.
command: pg_dump -f "backup-$(date +'%s').pg_restore" $DATABASE_URL
在您提供的命令中,有很多事情需要注意:
\
的情况下在原始外部对中嵌套另一个双引号。 另一种选择是在一对双引号中使用尽可能多的单引号对。 请参阅此答案和有关2.2.2 Single-Quotes
和2.2.3 Double-Quotes
的摘录。$()
或``
表示法。 但不像我说的那样在单引号内。vi "backup-`date +'%s'`.txt"
vi "backup-$(date +'%s').txt"
command
会覆盖容器镜像(即 Dockerfile 的 CMD)声明的默认命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.