我正在使用 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 命令的环境变量的明确文档,这是设计使然吗?
有人可以帮我澄清一下吗?
ARG
文档中找不到它,以及 ARG 或 ENV,在这种情况下使用哪一个? 提供了丰富的信息,但也没有真正回答问题。
从快速测试来看,似乎是的,
ARG
指令在构建期间设置了一个环境变量。
您可以通过以下方式验证自己:
$ cat >Dockerfile <<'EOF
FROM alpine
ARG test
RUN printenv
EOF
$ docker build --build-arg test=42 .
这将在构建图像时打印环境变量,您将在输出中找到“test=42”。