Я предполагаю, что вы проходите аутентификацию в своем личном реестре npm с помощью приватной сертификации s sh. В этом случае вам нужно будет использовать Docker Build Enhancements .
Вот несколько вещей, которые вам нужно обновить:
- In ваш
Dockerfile
, добавьте эту строку в качестве первой строки: # syntax=docker/dockerfile:experimental
- Измените
RUN npm install --production
на RUN --mount=type=ssh npm install --production
- После этого вы можете построить свое изображение как
docker build --ssh <image_name> .
Новый Dockerfile
# syntax=docker/dockerfile:experimental
FROM node
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm set strict-ssl false --global
RUN git init
RUN git config --global http.sslVerify false
RUN git config http.emptyAuth true
RUN --mount=type=ssh npm install --production
RUN mv node_modules ../
COPY . .
CMD npm start
EDIT 1
Поскольку вы устанавливаете учетные данные в качестве переменных среды (которые вам следует подумать о том, чтобы изменить его на использование сертификата s sh), вот решение, которое я предлагаю.
- Подготовьте файл, содержащий имена и значения среды, которые вы используете для входа в систему git. Допустим, файл находится в /gitsecret.txt с содержимым вроде
GIT_USERNAME=<value>
GIT_PASSWORD=<value>
Обновите
Dockerfile
как
# syntax=docker/dockerfile:experimental
# Builder layer
FROM node as builder
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm set strict-ssl false --global
RUN git init
RUN git config --global http.sslVerify false
RUN git config http.emptyAuth true
RUN --mount=type=secret,id=gitsecret \
set -a; \
source /run/secrets/gitsecret; \
set +a; \
npm install --production
# Main layer
FROM node
WORKDIR /usr/src/app
RUN mv node_modules ../
COPY --from=builder /usr/src/app/node_modules /usr/src/node_modules
COPY . .
CMD npm start
Теперь вы можете запустить команду docker build, например,
docker build --secret id=gitsecret,src=/gitsecret.txt <image_name> .
Таким образом, вы можете убедиться, что:
- Секрет может использоваться только во время фаза сборки. Слой сборки будет удален из окончательного изображения, поэтому секретное изображение не останется в конечном изображении.
- Секретное содержимое не будет распечатано во время сборки.
ПРИМЕЧАНИЕ У меня нет вашего полного исходного кода, поэтому я не гарантирую, что код будет работать для вашего случая только путем копирования и вставки. Тем не менее, идея есть, поэтому, пожалуйста, обновите ее соответственно!