Ubuntu 无法在生成阶段通过Dockerfile在docker容器中设置环境变量

Ubuntu 无法在生成阶段通过Dockerfile在docker容器中设置环境变量,ubuntu,docker,fedora,Ubuntu,Docker,Fedora,我想在构建docker容器时将http代理和https代理设置为docker容器。因此,我在Dockerfile的开头用ENV关键字对其进行了配置。像这样的 FROM hub.docker.example.com/fedora:25 ENV http_proxy=http://example.com:911 ENV https_proxy=https://example.com:912 RUN \ . . my tasks, download something which n

我想在构建docker容器时将http代理和https代理设置为docker容器。因此,我在Dockerfile的开头用
ENV
关键字对其进行了配置。像这样的

FROM hub.docker.example.com/fedora:25

ENV http_proxy=http://example.com:911
ENV https_proxy=https://example.com:912


RUN \
  .
  .
  my tasks, download something which need proxy
  .
  .

ENTRYPOINT sleep infinity
但是,当我运行容器并使用命令
ENV | grep proxy
检查时,没有设置代理。我在Dockerfile上做错什么了吗


*这是一个fedora图像

如果您仔细阅读文档,就会清楚地看到这一点

如果容器需要使用HTTP、HTTPS或FTP代理服务器, 您可以通过不同的方式对其进行配置:

  • 在Docker 17.07及更高版本中,您可以将Docker客户端配置为 自动将代理信息传递给容器
配置Docker客户端

在Docker客户端上,在中创建或编辑文件~/.Docker/config.json 启动容器的用户的主目录。添加JSON,例如 如下所示,将代理类型替换为httpsProxy或 ftpProxy(如有必要),并替换 代理服务器。您可以同时配置多个代理服务器 时间

因此,使用这种方法可以摆脱旧方法

创建或启动新容器时,将在容器内自动设置环境变量

   {
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}
对于旧版本

构建映像时,或者在创建或运行容器时使用--env标志时,可以将以下一个或多个变量设置为适当的值。这种方法使图像的便携性降低


我刚刚检查了你在fedora上的问题,ubuntu和ENV都设置好了。 我不明白你的步骤,但我可以张贴我的步骤,清楚地分开,这样你就可以告诉我其中哪一个步骤有问题: 我的Docker文件如下所示:

FROM fedora

ENV http_proxy=http://example.com:911
ENV https_proxy https://example.com:912

ENTRYPOINT sleep infinity
之后,使用最新的Fedora,在Dockerfile所在的同一目录中执行生成映像:

docker build -t yourimagename .
docker run -d --name yourcontainername yourimagename 
docker exec -ti yourcontainername bash
使用
env
检查环境变量,而不是
env

env | grep http
https_proxy=https://example.com:912
http_proxy=http://example.com:911
最后,您在Dockerfile中正确定义了ENV。此外,您还可以不使用“=”符号来定义它们。两者都是正确的:


我想他不是想在cli中创建它,而是想在Dockerfile中创建它。因此,Dockerfile中的ENV优于cli中的--ENV,尽管它们产生的结果相同。此外,他的提案与HTTP服务器无关。HTTP服务器是一个结果,因为事实是Dockerfile中的ENV变量存在问题,这些变量显然不在容器中。共享您的确切Dockerfile可能会在我的组织提供的某些中间层中被删除。我使用
run-it/bin/sh
登录到该容器,然后尝试命令
import
,它显示未找到
command
。这是我设置环境变量的原因吗?
ENV | grep proxy
是一个输入错误:)拉取图像怎么样
docker pull hub.docker.example.com/fedora:25
是否有效?让我们从一开始就一步一步地尝试拉取映像成功,因此我可以看到带有
docker映像的映像,并且它也可以启动和执行。在docker文件的其他步骤中,您是否有任何http_代理配置可以重写ENV?你能试试同样的Dockerfile而不需要中间步骤吗?参数仅在生成步骤中可用,但ENV应在容器启动后保持。
ENV http_proxy=http://example.com:911
ENV http_proxy http://example.com:911