首页 > 解决方案 > 如何通过运行传递参数以供 Dockerfile 使用?

问题描述

我有这个简单的 Dockefile:

FROM alpine:3.7
ARG VAR1=initialValue
RUN mkdir $VAR1

ENV VAR2=goodValue
RUN mkdir $VAR2

当我构建传递新值的图像时,会创建一个newValue文件夹

docker build --build-arg VAR1=newValue -f Dockerfile -t test  .

但是当我尝试使用运行命令更改 VAR2 的值时,它不起作用:

docker run  -e VAR2=betterValue   test

goodValue文件夹已创建。(但是,当我执行容器并列出环境变量时,VAR2 现在等于 betterValue。

如何通过运行传递参数以供 Dockerfile 使用?如果不可能,有什么解决方法?

标签: dockerenvironment-variablesdockerfile

解决方案


我认为您可以有一个更好的选择,而不是将这些传递给 docker CMD。我认为这就是您正在寻找的,使用 env 创建

FROM alpine:3.7
ARG VAR1=initialValue
RUN mkdir $VAR1

ENV VAR2=goodValue
RUN mkdir $VAR2
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod 777 /usr/local/bin/docker-entrypoint.sh \
    && ln -s /usr/local/bin/docker-entrypoint.sh /
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["/bin/ash"]

并在您的 docker 入口点创建目录

#!/bin/ash
set -e

if [ "$1" = '/bin/ash' ]; then
    echo "container booting..."
    echo "creating directory having name $VAR2"
    mkdir -p $VAR2
fi

exec "$@"

在此处输入图像描述


推荐阅读