Не удалось получить uid / gid при сборке Node / Docker

Мой Dockerfile использует alpine и глобально устанавливает сценарии реакции. Когда он пытается установить его, он терпит неудачу с ошибкой «не удалось получить uid / gid». Я добавил параметр «--- unsafe-perm» в команду npm install -g. Контейнер докера успешно создан, но разрешения в контейнере переданы для установленных файлов. Я вижу, что имя пользователя и группа установлены на 1000 для всех из них. Я попытался добавить следующую команду в Dockerfile прямо перед этапом установки, но это не помогло.

RUN npm -g config set user root

Ошибка сборки

Error: could not get uid/gid
[ 'nobody', 0 ]

    at /usr/local/lib/node_modules/npm/node_modules/uid-number/uid-number.js:37:16
    at ChildProcess.exithandler (child_process.js:296:5)
    at ChildProcess.emit (events.js:182:13)
    at maybeClose (internal/child_process.js:961:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:250:5)
TypeError: Cannot read property 'get' of undefined
    at errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at /usr/local/lib/node_modules/npm/bin/npm-cli.js:76:20
    at cb (/usr/local/lib/node_modules/npm/lib/npm.js:228:22)
    at /usr/local/lib/node_modules/npm/lib/npm.js:266:24
    at /usr/local/lib/node_modules/npm/lib/config/core.js:83:7
    at Array.forEach (<anonymous>)
    at /usr/local/lib/node_modules/npm/lib/config/core.js:82:13
    at f (/usr/local/lib/node_modules/npm/node_modules/once/once.js:25:25)
    at afterExtras (/usr/local/lib/node_modules/npm/lib/config/core.js:173:20)
    at Conf.<anonymous> (/usr/local/lib/node_modules/npm/lib/config/core.js:231:22)
/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205
  if (npm.config.get('json')) {
                 ^

TypeError: Cannot read property 'get' of undefined
    at process.errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at process.emit (events.js:182:13)
    at process._fatalException (internal/bootstrap/node.js:472:27)
ERROR: Service 'sample-app' failed to build: The command '/bin/sh -c npm install [email protected] -g' returned a non-zero code: 

Dockerfile

/usr/src/app # cat Dockerfile
# build environment
FROM node:10-alpine as builder
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install [email protected] -g 
COPY . /usr/src/app
RUN npm run build

# production environment
FROM nginx:1.13.9-alpine
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
46
0
20 033
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

UPD Фиксированный в [email protected]?

Проверьте, связано ли это с nodejs / docker-node, проблема 813:

Root cause seems to be: Thread stack size

The default stack size for new threads on glibc is determined based on the resource limit governing the main thread’s stack (RLIMIT_STACK).
It generally ends up being 2-10 MB.

There three possible solutions:

Вы уже пробовали третий вариант, но учтите также:

Alternatively, you should switch to the slim (Debian) variant until this get's fixe upstream by the Alpine team.

RUN npm config set unsafe-perm true в файле докеров перед установкой npm
Nick Roz 19.03.2019 11:44

Я выбрал третий вариант, он отлично сработал. Для меня любое снижение производительности было незначительным

jonasbn 06.02.2020 07:34

У меня возникла такая же проблема в Docker для образа node-alpine, когда я докерирую свое приложение для реагирования.

Я решил с помощью следующей конфигурации файла докеров.

FROM node:8.10.0-alpine

# Set a working directory
WORKDIR /usr/src/app

COPY ./build/package.json .
COPY ./build/yarn.lock .

# To handle 'not get uid/gid'
RUN npm config set unsafe-perm true

# Install Node.js dependencies
RUN yarn install --production --no-progress

# Copy application files
COPY ./build .

# Install pm2
RUN npm install -g pm2 --silent


# Run the container under "node" user by default
USER node

CMD ["pm2", "start", "mypm2config.yml", "--no-daemon", "--env", "preprod"]

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