web-dev-qa-db-fra.com

Impossible d'obtenir uid / gid lors de la construction de Node / Docker

Mon Dockerfile utilise Alpine et installe globalement des scripts de réaction. Lorsqu'il essaie de l'installer, il échoue avec l'erreur "Impossible d'obtenir uid/gid". J'ai ajouté l'option "--- unsafe-perm" à la commande npm install -g. Le conteneur Docker est créé avec succès, mais les autorisations dans le conteneur sont envoyées pour les fichiers installés. Je vois le nom d'utilisateur et le groupe définis sur 1000 pour chacun d'eux. J'ai essayé d'ajouter la commande suivante au Dockerfile juste avant l'étape d'installation, mais cela n'a pas aidé.

RUN npm -g config set user root

Erreur de build

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;"]
16
user994165

Vérifiez si cela est lié à nodejs/docker-node issue 81 :

La cause première semble être: taille de la pile de threads

La taille de pile par défaut pour les nouveaux threads sur glibc est déterminée en fonction de la limite de ressources régissant la pile du thread principal (RLIMIT_STACK).
Il finit généralement par être de 2 à 10 Mo.

Il y a trois solutions possibles:

Vous avez déjà essayé la troisième option, mais envisagez également:

Alternativement, vous devriez passer à la variante slim (Debian) jusqu'à ce que cela soit fixé en amont par l'équipe Alpine.

24
VonC

J'ai rencontré le même problème dans Docker pour l'image de nœud alpin lorsque je dockerise mon application React

J'ai résolu la configuration de dockerfile suivante.

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"]
2
ShreePrakash