使用 DockerFile 中的命令结果解析变量

Sil*_*ntT 6 docker dockerfile

我需要用命令的结果填充 dockerfile 中的变量

就像在 bash 中 var=$(date)

编辑 1

日期就是一个例子。在我的情况下,我使用FROM phusion/baseimage:0.9.17所以我想在每个建筑物使用最后一个版本,所以我使用这个 curl -v --silent api.github.com/repos/phusion/baseimage-docker/tags 2>&1 | grep -oh 'rel-.*",' | head -1 | sed 's/",//' | sed 's/rel-//'==> 0.9.17。但我不知道我如何用 dockerfile 在 var 中解析它以获得这个结果

ENV verbaseimage=curl...
FROM phusion/baseimage:$verbaseimage
Run Code Online (Sandbox Code Playgroud)

结果

在我的用例中

FROM phusion/baseimage:latest
Run Code Online (Sandbox Code Playgroud)

但是对于其他情况,这个问题仍未解决

小智 4

我遇到了同样的问题,并找到了通过在 dockerfile 中使用 RUN 命令来设置环境变量作为功能结果的方法。

例如,我需要为 Rails 应用程序设置一次 SECRET_KEY_BASE ,而无需像运行时那样进行更改:

docker run  -e SECRET_KEY_BASE="$(openssl rand -hex 64)"
Run Code Online (Sandbox Code Playgroud)

相反,我将其写入 Dockerfile 字符串,例如:

RUN bash -l -c 'echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" >> /etc/bash.bashrc'
Run Code Online (Sandbox Code Playgroud)

即使在 bash 登录后,我的 env 变量也可以从 root 获取。或者可能

RUN /bin/bash -l -c 'echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" > /etc/profile.d/docker_init.sh'
Run Code Online (Sandbox Code Playgroud)

那么它可以在 CMD 和 ENTRYPOINT 命令中使用

Docker 将其缓存为层,并且仅当您更改其之前的一些字符串时才会更改。

您还可以尝试不同的方法来设置环境变量。