我在 cloudformation 模板中的 docker 容器中自动部署 java 应用程序。我需要为 java 崩溃日志设置一个 env 变量,但我需要保持每个容器的路径唯一。我无法修改 docker 映像或 dockerfile。
为此,我使用来自 docker 容器的 $HOSTNAME ,它足够独特。问题是我不能像往常一样使用 docker 环境变量,因为它是在容器启动后设置的。解决方法是通过设置 env 变量来更改入口点,然后启动原始入口点。
EntryPoint:
- /bin/sh
- -c
- export JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=/mnt/crashdumps/java_$HOSTNAME.hprof"
&& ./entrypoint.sh
(它是 AWS::ECS::TaskDefinition 的 cloudformation YAML 模板,但同样的东西可以在 docker cli 中表达)
在 Java 容器提供程序更改入口点 shell 脚本的位置之前,它运行良好。现在,shell 注入在代码中看起来真的很脏,因为我需要检查文件是否存在并且需要更多维护(即,以防入口点路径或文件名再次更改)。
有没有更好的方法:
- 使用与修改入口点不同的方法动态设置具有容器名称的路径;或者
- 只注入一个“导出”命令并运行原始入口点,无论名称和路径是什么?