Reputation: 578
ARG BUILD_DIR
missng after second FROM
.
What I doing wrong?
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
Part of output is
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
docker version: 19.03.8
Upvotes: 3
Views: 2325
Reputation: 578
ARG BUILD_DIR=/build
# build
# одноразовый контейнер
FROM node:14 as build
ARG BUILD_DIR
There is global and local scope Global can be translated into local of each container
Expansion: ARG
s defined before the first FROM
statement are available in every subsequent FROM
statement, and can be transferred "into" each build stage by also adding an ARG
statement with the same name and no default content. Note that defining the ARG
prior to the first FROM
statement is the ONLY way to make them available to subsequent FROM
statements.
Upvotes: 2