我们可以通过cmd行传递ENVvariables,同时通过dockerfile构build一个docker镜像吗?

我正在处理一个任务,涉及使用Dockerfile构build以centOs为基础的docker映像 。 dockerfile中的一个步骤需要设置http_proxyhttps_proxy ENVvariables,以便在代理之后工作。

由于这个Dockerfile将被具有不同代理的多个团队使用,我想避免为每个团队编辑Dockerfile。 相反,我正在寻找一个解决scheme,允许我在构build时传递ENVvariables,例如,

sudo docker build -e http_proxy = somevalue。

我不确定是否已经有一个选项可以提供这个function。 我错过了什么吗?

容器可以使用build arguments (在Docker 1.9+中)来build arguments ,它们像环境variables一样工作。

这里是方法:

 FROM php:7.0-fpm ARG APP_ENV=local ENV APP_ENV ${APP_ENV} RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini 

然后build立一个生产容器:

docker build --build-arg APP_ENV=prod .

针对您的特定问题:

 FROM debian ENV http_proxy ${http_proxy} 

然后运行:

docker build --build-arg http_proxy=10.11.24.31 .

请注意,如果使用docker-compose构build容器,则可以在docker-compose.yml文件中指定这些构build参数 ,但不能在命令行中指定这些构build参数 。 但是,您可以在使用环境variablesdocker-compose.yml文件中使用variablesreplace 。

我面临同样的情况。

根据Sin30的回答,漂亮的解决scheme是使用shell,

 CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]