这是我在法学硕士的帮助下编写的脚本。除了最后一步需要将环境文件注入到我的 nodejs 进程之外,其他都正常。
FROM node:20.17-bullseye-slim AS dependencies
WORKDIR /usr/src/app/test
COPY package.json ./
RUN npm install --only=production
ARG APP_NAME
ENV APP_NAME=${APP_NAME}
RUN PKG_VERSION=$(node -p "require('./package.json').version") && echo "PKG_VERSION=\"$PKG_VERSION\"\nAPP_NAME=\"$APP_NAME\"" > docker.env
# Production image
FROM node:20.17-bullseye-slim AS runner
ENV NODE_ENV=production
WORKDIR /usr/src/app/test
# Copy dependencies and version.env from the previous stage
COPY --from=dependencies /usr/src/app/test/node_modules ./node_modules
COPY --from=dependencies /usr/src/app/test/docker.env ./
# Copy the rest of the app
COPY ./ ./
# Set permissions
RUN chown -R node:node .
USER node
RUN cat docker.env
# Load version into environment and start the app
CMD ["/bin/sh", "-c", ". ./docker.env && exec node main.js"]
我从 build-args 中获取了 APP_NAME,并希望从包文件中包含版本信息。这样正确吗?