docker - 多阶段构建中缺少 docker arg
问题描述
ARGBUILD_DIR
在第二个之后丢失FROM
。我做错了什么?
Dockerfile:
# build
# одноразовый контейнер
FROM node:latest as build
ARG BUILD_DIR=/build
# создание директории приложения
WORKDIR $BUILD_DIR
# установка зависимостей
# символ астериск ("*") используется для того чтобы по возможности
# скопировать оба файла: package.json и package-lock.json
COPY package*.json \
tsconfig.json \
./
COPY src src
RUN echo ${BUILD_DIR}
RUN npm i
RUN npm run build
# ---------------------------------------
# build end
#
# app
# ---------------------------------------
RUN echo "1\n"; test -n "$BUILD_DIR" || (echo "BUILD_DIR not set" && false)
FROM node:14-alpine as production
RUN echo "2\n"; test -n "$BUILD_DIR" || (echo "BUILD_DIR not set" && false)
ARG PM2_CONFIG=out/config/ecosystem.config.js
#RUN apt-get update && apt-get install -y \
# build-essential
RUN npm i -g pm2
# создание директории приложения
WORKDIR /usr/local/app
RUN echo ${BUILD_DIR}
COPY --from=build /build/out out
COPY --from=build /build/node_modules node_modules
#EXPOSE # бот использует поллинг
CMD pm2 start ${PM2_CONFIG} && pm2 logs
部分输出是
Step 9/18 : RUN echo "1\n"; test -n "$BUILD_DIR" || (echo "BUILD_DIR not set" && false)
---> Running in c7b0a92fc970
1
Removing intermediate container c7b0a92fc970
---> 977a5ec0be6f
Step 10/18 : FROM node:14-alpine as production
---> 87c43f8d8077
Step 11/18 : RUN echo "2\n"; test -n "$BUILD_DIR" || (echo "BUILD_DIR not set" && false)
---> Running in e2b3de94bb3a
2\n
BUILD_DIR not set
The command '/bin/sh -c echo "2\n"; test -n "$BUILD_DIR" || (echo "BUILD_DIR not set" && false)' returned a non-zero code: 1
码头工人版本:19.03.8
解决方案
ARG BUILD_DIR=/build
# build
# одноразовый контейнер
FROM node:14 as build
ARG BUILD_DIR
有全局和局部范围 全局可以翻译成每个容器的局部
推荐阅读
- php - 尽管我在那里添加了数据,但为什么此时数组始终为空?
- javascript - 带有随机颜色生成器的剪贴板
- vaadin - Vaadin 14:带有图标、文本和图像的 Textfield 标签的工具提示
- python - Django:为自定义用户模型使用外键关系
- c# - Unity 如何在脚本 CS0246 中正确声明输入操作
- jenkins - 访问 jenkins url 时出现 HTTP ERROR 404 Not Found 错误
- testing - 使用 Ctrl+C 关闭 Netrlify 服务器后,React Server 继续在端口 3000 上运行
- docker - 在 kubernetes 上的 alpine docker 中克隆 repo 和移动文件时出现“目录或文件不存在”
- android - 为什么有时我需要在列表中使用 key()?
- java - org.jetbrains.annotations.Contract 可以处理整数范围吗?