我们可以通过cmd行传递ENVvariables,同时通过dockerfile构build一个docker镜像吗?
我正在处理一个任务,涉及使用Dockerfile构build以centOs为基础的docker映像 。 dockerfile中的一个步骤需要设置http_proxy和https_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"]