Npm UNABLE_TO_GET_ISSUER_CERT_LOCALLY в докере за корпоративным брандмауэром

Я получаю сообщение об ошибке при запуске npm от имени пользователя root в Dockerfile.

 > [runner  5/10] RUN npm install --global pm2:
#0 71.79 npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

У нас есть антивирус / корпоративный брандмауэр, который мы не можем отключить, который заменяет SSL-сертификаты для проверки трафика.

Моя проблема в том, что, поскольку npm install --global pm2 работает от имени пользователя root, он не соблюдает export NODE_EXTRA_CA_CERTS=/path/to/my-cacert.crt.

Пробовал с RUN npm config set cafile /path/to/my-cacert.crt, но тоже почему-то не сработало.

Как я могу исправить UNABLE_TO_GET_ISSUER_CERT_LOCALLY при запуске npm от имени пользователя root в контейнере докеров?

Этот dockerfile воспроизводит проблему:

FROM node:alpine AS deps

COPY my.crt /usr/local/share/ca-certificates/
RUN cat /usr/local/share/ca-certificates/my.crt >>/etc/ssl/certs/ca-certificates.crt

RUN npm install --global pm2
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
5
0
186
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы опубликуете свой Dockerfile, это будет полезно,

но есть несколько вариантов для вас.

1- вместо использования export установите параметр NODE_EXTRA_CA_CERTS с параметром ARG в файле докеров, он будет использоваться для всех пользователей, независимо от того, измените ли вы своего пользователя между сборками следующим образом:

FROM node:alpine AS deps

ARG NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt

COPY my.crt /usr/local/share/ca-certificates/
RUN cat /usr/local/share/ca-certificates/my.crt >>/etc/ssl/certs/ca-certificates.crt

RUN npm install --global pm2

Но если вы установите переменную с помощью export, она будет использоваться только для той записи RUN, которую вы использовали export. Помните, что если вы выполняете многоэтапную сборку ARG, она ограничена их этапом, и если вам нужно установить это на разных этапах, вы должны использовать свой ARG на каждом этапе.

2- использовать http вместо https (это небезопасно, но можно использовать). Вы можете установить его в своей конфигурации, например: npm config set registry http://registry.npmjs.org/

3- добавьте свой сертификат CA в доверенные сертификаты в вашем Dockerfile, например:

...
COPY ca.crt /usr/local/share/ca-certificates/ca.crt
RUN apt update && \
  apt install -y ca-certificates && \
  update-ca-certificates
...

Я обновил вопрос с образцом Dockerfile.

sashoalm 04.04.2023 18:32

На самом деле, ваше решение с ARG NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt сработало. Спасибо!

sashoalm 04.04.2023 18:34

Спасибо, я назначу вам награду, как только система это позволит.

sashoalm 04.04.2023 18:36

Другие вопросы по теме