带有环境变量的 Dockerfile Healthcheck

ben*_*ist 5 docker dockerfile

我有一个用 C++ 编写的 REST 服务,它有一个 localhost:somePort/health 端点。该端口在基于 yaml 的配置文件中配置。

我创建了一个从 yaml 文件中提取端口的脚本。但我的问题是将结果分配给我的 Dockerfile 中的 HEALTHCHECK 命令。

假设我有一个脚本 /app/get_port.sh 回显启动时使用的实际端口。如何将该端口传递给 HEALTHCHECK 命令?例如,要使其工作:

HEALTHCHECK --interval=10s --timeout=4s CMD curl -f "http://localhost:$MY_PORT/health" || exit 
Run Code Online (Sandbox Code Playgroud)

ben*_*ist 1

我的解决方法是在curl命令中使用子shell:

RUN echo "Healthcheck port: $(/app/get_port.sh)\n"
HEALTHCHECK --interval=10s --timeout=4s CMD curl -f "http://localhost:$(/app/get_port.sh)/health" || exit 1
Run Code Online (Sandbox Code Playgroud)

尽管我希望 Docker 能够获得处理 ENV 的高级选项。