如何更改Docker ENV var?

时间:2016-06-21 09:47:26

标签: shell docker environment-variables

在构建Dockerfile时,我经常允许在构建期间配置参数,以便更容易构建稍微不同的容器。为实现此目的,我使用了ENV变量的默认值以及用户可定义的ARG。示例Dockerfile快速测试:

FROM busybox
ARG FLAGS
ENV FLAGS ${FLAGS:-}
RUN echo "${FLAGS}"

然后可以这样使用:

docker build --build-arg FLAGS="foo --remove-me" -t <imagename>:<tag> .

现在我发现自己确实想要从我允许运行的命令中主动删除特定标志(在上面的示例中为--remove-me)(由于错误未修复年)。虽然我知道如何在其他情况下删除该标志:

LC_ALL=C sed -e 's/ --remove-me//'

我遇到的问题是我不知道如何管道和删除标志。我知道我可以在使用RUN时执行此操作,但是我必须对每个sed语句重复使用RUN以上,因此不能使其重复。

2 个答案:

答案 0 :(得分:2)

this AskUbuntu answer中阅读了关于shell变量替换之后,我试了一下:

ENV FLAGS ${FLAGS//--fully-static/}

但是,我遇到了以下错误:

Missing ':' in substitution: "${FLAGS:-}" | "${FLAGS//--fully-static/}"

首先我发现Docker只支持有限的bash variable replacement methods。最后,我可以找到Docker GitHub Repo中的shell_parser.go文件,其中:必须在那里,这样就可以在第一步中直接杀死沿着这条路线的任何努力。

答案 1 :(得分:0)

运行同一期。我的解决方法是:

使用登录外壳读取.profile:

# need docker >= 1.12
SHELL ["bash", "--login", "-c"]

创建新的环境变量并替换:

RUN echo "export PROXY_HOST_IP=${PROXY_HOST#"http://"}" >> ${HOME}/.profile