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
我在脚本中有一个名为 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