Dockerfile ENTRYPOINT 中未读取日期

Date is not being read in Dockerfile ENTRYPOINT

问题第一次没问题,但接下来它无法写入同名文件,所以我尝试添加 pod_id 使其唯一,但似乎 pod id 在重新启动时保持不变失败后,尝试将时间戳添加到文件名中,但日期函数被视为字符串,因此每次重新启动时文件名仍然相同,下次不会生成堆转储文件。

ENTRYPOINT ["java","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=mountpath-heapdump/$MY_POD_ID$(date +'%Y-%m-%d_%H-%M-%S')_heapdump.bin","-jar", "/app.jar"])

我也没有双引号:

ENTRYPOINT java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=mountpath-heapdump/$MY_POD_ID$(date +'%Y-%m-%d_%H-%M-%S')_heapdump.bin -jar app.jar

在 POC 中工作正常,但对于我的项目应用程序,环境变量没有反映,spring-profile 未被选中。甚至其他环境变量也没有被选中。所以我正在尝试第一种方法,只是我需要帮助在文件名中附加时间戳。

虽然推荐使用 exec 形式,但在这种情况下,由于格式复杂,因此创建并执行了单独的 shell 脚本。

测试环境不包括 java 环境,并配置为在 运行 连接容器时将参数传递给 exec 形式。

[Dockerfile]

FROM ubuntu

COPY ./entrypoint.sh /

RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

[entrypoint.sh]

#!/bin/bash
echo java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=mountpath-heapdump/$POD_ID$(date +$DATE_FORMAT)_heapdump.bin -jar /app.jar

[docker 构建 & 运行]

docker build -t test .
docker run --rm -e POD_ID='POD_ID' -e DATE_FORMAT='%Y-%m-%d_%H-%M-%S' test

输出是...

root@DESKTOP-6Q87NVH:/tmp/test# docker run --rm -e POD_ID='POD_ID' -e DATE_FORMAT='%Y-%m-%d_%H-%M-%S' test
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=mountpath-heapdump/POD_ID2021-11-03_15-02-22_heapdump.bin -jar /app.jar

@rzlvmp 提供的答案对我有用。

您可以尝试 运行 java inside shell ENTRYPOINT ["bash", "-c", "java -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=mountpath-heapdump/$MY_POD_ID$(date +'%Y-%m-%d_%H-%M-%S')_heapdump.bin -jar /app.jar"]