提问人:sabri mahmoud 提问时间:2/1/2023 更新时间:2/2/2023 访问量:557
source /etc/environment :构建 Docker 镜像时环境变量不刷新
source /etc/environment : Environment variables are not refreshing when building Docker image
问:
我在企业网络环境中使用 Docker 时遇到了一个挑战。为了克服网络限制,我配置了 Docker 守护程序的 DNS,如此堆栈问题中所述。此外,我在 Docker 映像中设置了代理环境变量,如下所示:
ENV http_proxy = http://login:[email protected]:1111
ENV https_proxy = http://login:[email protected]:1111
ENV ftp_proxy = http://login:[email protected]:1111
ENV no_proxy = 127.0.0.1, z.z.z.z , y.y.y.y, x.x.x.x,localhost
通过这样做,我成功地绕过了apt-get,但这里的问题是,当我尝试使用以下形式的命令在/etc/environment的bside中编写代理参数来执行此操作时:
RUN echo "\nexport http_proxy = http://login:[email protected]:1111\nexport https_proxy = ... etc" >> /etc/environment
为了刷新环境变量,我通过添加此行来遵循此堆栈问题,将默认 shell 从 /bin/sh 更改为 /bin/bash 请注意,这是必需的,否则您将收到错误 /bin/sh source command not found
SHELL ["/bin/bash", "-c"]
RUN source /etc/environment
然后检查是否发生了刷新,我只是输入
env | grep proxy
没有代理配置,我无法执行**运行apt-get update**
请注意,如果我运行容器并执行此刷新命令
source /etc/environment
然后执行 apt-get 更新,一切顺利!!
我真的不明白问题到底是什么,谢谢你给出任何解释。
感谢您的阅读。
版本:
- Docker 版本 20.10.23
- Kubuntu 22.04 LTS
答:
Dockerfile 中的每个 RUN 命令都会启动一个新的 shell。因此,当您调用 The environment is set for this shell, but for the next for the next 时,将启动一个新 shell,并且它有一个没有 http_proxy 变量的新环境。RUN source /etc/environment
RUN apt-get update
在这些情况下,惯例是使用 ENV insturction,就像您在问题开头提到的一样。但是,如果您确定要使用文件,则可以像这样使用它:/etc/environment
RUN source /etc/environment && apt-get update
评论
ENV
ARG
ENV
ARG