kai*_*ser 7 shell environment-variables docker
构建一个时Dockerfile,我经常允许在构建时配置参数,以便只容易配置稍微不同的容器.为实现这一点,我使用了ENV与用户可定义ARG的结合的变量的默认值.Dockerfile快速测试的示例:
FROM busybox
ARG FLAGS
ENV FLAGS ${FLAGS:-}
RUN echo "${FLAGS}"
Run Code Online (Sandbox Code Playgroud)
这可以像这样使用:
docker build --build-arg FLAGS="foo --remove-me" -t <imagename>:<tag> .
Run Code Online (Sandbox Code Playgroud)
现在我发现自己处于这样的情况:我确实想要--remove-me从我允许运行的命令中主动删除特定标志(在上面的示例中: )(由于一年多以来没有修复的错误).虽然我知道如何在其他情况下删除标志:
LC_ALL=C sed -e 's/ --remove-me//'
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我不知道如何管道和删除标志.我知道我可以在使用时执行此操作RUN,但是我必须在sed每个RUN语句上重复使用上述内容,因此不能使其重复.
在阅读了AskUbuntu答案中关于 shell 变量替换的内容后,我尝试了一下:
ENV FLAGS ${FLAGS//--fully-static/}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了以下错误:
Run Code Online (Sandbox Code Playgroud)Missing ':' in substitution: "${FLAGS:-}" | "${FLAGS//--fully-static/}"
首先我发现Docker只支持有限的bash变量替换方法。shell_parser.go最后,我可以在Docker GitHub Repo中找到该文件,很明显该文件:必须在那里,这会在第一步中主动终止沿着这条路线进行的任何努力。
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |