在Dockerfile中传递环境变量

3
我需要在我的Dockerfile中传递环境变量,像下面这样。我想知道如何高效地做到这一点。我尝试使用构建参数。
docker build --build-arg myIP=123 --rm -t react_2811_1154 .

但是它没有生效。

这是我的 Dockerfile:

ARG myIP

FROM node:11

ENV myIP1 $myIP


ENV REACT_APP_MOCK_API_URL=http://${myIP1}:8080/API
ENV REACT_APP_MOCK_API_URL_AUTH=http://${myIP1}:8080/API/AUTH
ENV REACT_APP_MOCK_API_URL_PRESENTATION=http://${myIP1}:8080/API/PRESENTATION

# set working directory
RUN mkdir /usr/src/app/
WORKDIR /usr/src/app/

COPY . /usr/src/app/.

RUN npm install 

#RUN npm start
CMD ["npm", "start" ]

当我运行docker容器时,我不想向其发送任何环境变量。请给予建议。

我不清楚你的问题。你想尝试将环境传递到Docker容器中,但不知道如何在容器内部使用这些值吗?你的Dockerfile没有问题。 - Truong Dang
为了澄清Truong的话:环境变量没有在容器内设置还是npm无法获取这些变量?你能否通过在Docker容器中运行echo $<variable_name来检查一下? - Anuvrat Parashar
2
请记住,即使在同一组织的开发/测试/生产环境中,IP地址和主机名也可能会更改。这不是您想要“烘焙”到Docker镜像中的细节,将其作为运行时环境变量传递要好得多。 - David Maze
请检查此问题,https://dev59.com/blkS5IYBdhLWcg3woIJR#39598751 - Ali Torki
请查看 ARG 的范围:https://docs.docker.com/engine/reference/builder/#scope - BMitch
1个回答

4

我运行了你的Dockerfile,在容器内部运行env命令时,确实会发现myIP为空。

要解决这个问题,尝试将ARG行放在FROM行之后。

所以,

FROM node:11

ARG myIP

ENV myIP1 $myIP

ENV REACT_APP_MOCK_API_URL=http://${myIP1}:8080/API
ENV REACT_APP_MOCK_API_URL_AUTH=http://${myIP1}:8080/API/AUTH
ENV REACT_APP_MOCK_API_URL_PRESENTATION=http://${myIP1}:8080/API/PRESENTATION

使用此Dockerfile构建,我能够设置myIP


ARG 具有作用域。在 FROM 行之前,ARG 只适用于 FROM 行。在 Dockerfile 的其他部分中,ARG 从定义它的位置开始应用到阶段(或单个阶段文件中的 Dockerfile)的末尾。 - BMitch
非常感谢大家,你们真的很有帮助。 - Ranjith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接