Ani*_*eth 60 environment-variables docker boot2docker dockerfile
我正在开展一项任务,涉及使用Dockerfile构建一个以centOs为基础的docker镜像.dockerfile中的一个步骤需要设置http_proxy和https_proxy ENV变量才能在代理后面工作.
由于这个Dockerfile将由具有不同代理的多个团队使用,我想避免为每个团队编辑Dockerfile.相反,我正在寻找一个允许我在构建时传递ENV变量的解决方案,例如,
sudo docker build -e http_proxy = somevalue.
我不确定是否已有提供此功能的选项.我错过了什么吗?
小智 98
容器可以使用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
Run Code Online (Sandbox Code Playgroud)
然后构建一个生产容器:
docker build --build-arg APP_ENV=prod .
对于您的特定问题:
FROM debian
ENV http_proxy ${http_proxy}
Run Code Online (Sandbox Code Playgroud)
然后运行:
docker build --build-arg http_proxy=10.11.24.31 .
请注意,如果使用with构建容器docker-compose,则可以在docker-compose.yml文件中指定这些build-args,但不能在命令行中指定.但是,您可以在docker-compose.yml文件中使用变量替换,该文件使用环境变量.
Nic*_*ick 28
所以我不得不通过反复试验来解决这个问题,因为很多人解释说你可以通过ARG->ENV但它并不总是有效,因为 ARG 是在FROM标签之前还是之后定义非常重要。
下面的例子应该清楚地解释了这一点。我最初的主要问题是我所有的 ARGS 都是在之前定义的,FROM这导致所有的ENV总是未定义。
# ARGS PRIOR TO FROM TAG ARE AVAIL ONLY TO FROM for dynamic a FROM tag
ARG NODE_VERSION
FROM node:${NODE_VERSION}-alpine
# ARGS POST FROM can bond/link args to env to make the containers environment dynamic
ARG NPM_AUTH_TOKEN
ARG EMAIL
ARG NPM_REPO
ENV NPM_AUTH_TOKEN ${NPM_AUTH_TOKEN}
ENV EMAIL ${EMAIL}
ENV NPM_REPO ${NPM_REPO}
# for good measure, what do we really have
RUN echo NPM_AUTH_TOKEN: $NPM_AUTH_TOKEN && \
echo EMAIL: $EMAIL && \
echo NPM_REPO: $NPM_REPO && \
echo $HI_5
# remember to change HI_5 every build to break `docker build`'s cache if you want to debug the stdout
..... # rest of whatever you want RUN, CMD, ENTRYPOINT etc..
Run Code Online (Sandbox Code Playgroud)
我也面临着同样的情况。
根据 Sin30 的回答,漂亮的解决方案是使用 shell,
CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39272 次 |
| 最近记录: |