# 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..
3条答案
按热度按时间9cbw7uwe1#
容器可以使用
build arguments
(在Docker 1.9+中)构建,它的工作原理类似于环境变量。方法如下:
然后构建一个生产容器:
docker build --build-arg APP_ENV=prod .
对于您的特定问题:
然后运行:
docker build --build-arg http_proxy=10.11.24.31 .
请注意,如果您使用
docker-compose
构建容器,则可以在docker-compose.yml
文件中指定这些构建参数,但不能在命令行中指定。不过,您可以在docker-compose.yml
文件中使用变量替换,该文件使用环境变量。2izufjch2#
因此,我不得不通过反复试验来寻找这个问题,因为许多人解释说,您可以传递
ARG
-〉ENV
,但它并不总是工作,因为ARG是在FROM
标记之前还是之后定义非常重要。下面的例子可以解释清楚,我的主要问题是我所有的ARGS都是在
FROM
之前定义的,这导致所有的ENV
总是未定义的。13z8s7eq3#
我也遇到过同样的情况。
根据Sin30的回答,漂亮的解决方案是使用shell,