docker - 我们可以在通过 dockerfile 构建 docker 镜像的同时通过 cmd 行传递 ENV 变量吗?

标签 docker environment-variables boot2docker dockerfile

我正在处理一项任务,该任务涉及使用 Dockerfile 构建一个以 centOs 为基础的 docker 镜像。 dockerfile 中的步骤之一需要设置 http_proxyhttps_proxy ENV 变量才能在代理后面工作。

由于这个 Dockerfile 将被具有不同代理的多个团队使用,我想避免必须为每个团队编辑 Dockerfile。相反,我正在寻找一种允许我在构建时传递 ENV 变量的解决方案,例如,

sudo docker build -e http_proxy=somevalue .

我不确定是否已经有提供此功能的选项。我错过了什么吗?

最佳答案

可以使用 build arguments(在 Docker 1.9+ 中)构建容器,其工作方式类似于环境变量。

方法如下:

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

然后构建一个生产容器:

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 构建容器,您可以 specify these build-args in the docker-compose.yml file ,但不在命令行上。但是,您可以使用 variable substitution in the docker-compose.yml file, which uses environment variables .

关于docker - 我们可以在通过 dockerfile 构建 docker 镜像的同时通过 cmd 行传递 ENV 变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198835/

相关文章:

node.js - Docker compose 找不到我的 index.js

JAVA_HOME 和 PATH 已设置,但 java -version 仍显示旧版本

docker - 使用 `-e` 运行时需要为图像提供环境变量

docker - 如何更改正在运行的 docker 容器的 dns

docker - Ansible - 根据 docker 模块中的 list 文件有条件地设置卷和 tls 主机名

python-3.x - 在默认的 Tensorflow docker 容器中将 Jupyter 更新为 Python 3.4

docker - 如何编译docker-ce makefile?

使用 Bitbucket Pipelines 和 Docker 的 Android CI

jenkins - 如何将程序集版本设置为 Jenkins 内部版本号?

ip - 给 docker 容器一个可路由的 ip 地址