Docker 运行 和变量替换

Docker Run and variable substitution

我在脚本中有一个名为 image_name

的变量
image_name="my-app"

我正在尝试将此变量传递给 docker 容器,如下所示:

docker build -t $image_name .
docker run --rm --name $image_name -e "app_dir=${image_name}" $image_name

但是这个变量没有设置并且在 docker build

的上下文中是空白的

这是来自以下 Dockerfile 的片段:

....

RUN     echo dir is $app_dir

....

这是下面构建输出的片段:

....

Step 2 : RUN echo dir is $app_dir
---> Running in db93a939d701
dir is
---> c9f5e2a657d5
Removing intermediate container db93a939d701

....

有人知道如何进行变量替换吗?

这可以使用 docker build 命令的 build-arg 参数实现

参见:https://github.com/docker/docker/issues/6822#issuecomment-168170031 示例

请注意,您正在使用 Dockerfile 中的变量。该变量将在构建时进行评估 (docker build),因此您需要在那个时候传递它的值。这可以通过 --build-arg 参数来实现。

改变你的例子,它将是:

docker build --build-arg app_dir=${image_name} -t $image_name .
docker run --rm --name $image_name $image_name