Docker 构建参数泄漏到构建环境中

问题描述 投票:0回答:1

我正在使用 Docker 构建一些前端代码:

FROM docker-server/docker-images/ui/node:20.10.0-alpine AS webpack_build
ARG NODE_ENV
ARG SENTRY_AUTH_TOKEN

WORKDIR /app
COPY package* yarn.lock webpack.config.prod.js .babelrc ./
COPY static ./static
RUN yarn install
RUN pwd && ls -la && ls -la /app/node_modules/.bin/
RUN NODE_ENV="${NODE_ENV}" SENTRY_AUTH_TOKEN="${SENTRY_AUTH_TOKEN}" node --max-old-space-size=4096 node_modules/.bin/webpack --mode production --config webpack.config.prod.js

当我们将

--build-arg NODE_ENV=production
传递给
docker build
命令时,
yarn install
会跳过一些包,但使用其他值时,Yarn 会安装其他包。 我已经通过使用
RUN yarn install --production=false
解决了这个问题。

我怀疑构建参数在其中发挥了作用,但我找不到关于构建参数成为

yarn install
shell 命令的环境变量的明确文档,这是设计使然吗?

有人可以帮我澄清一下吗?

docker yarnpkg
1个回答
0
投票

我在

ARG
文档中找不到它,以及 ARG 或 ENV,在这种情况下使用哪一个? 提供了丰富的信息,但也没有真正回答问题。

从快速测试来看,似乎是的,

ARG
指令在构建期间设置了一个环境变量。

您可以通过以下方式验证自己:

$ cat >Dockerfile <<'EOF
FROM alpine
ARG test
RUN printenv
EOF
$ docker build --build-arg test=42 .

这将在构建图像时打印环境变量,您将在输出中找到“test=42”。

© www.soinside.com 2019 - 2024. All rights reserved.