Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

2K
Visualizações
permiso denegado, mkdir en contenedor en openshift

Tengo un contenedor con nodejs y pm2 como comando de inicio y en OpenShift recibo este error al iniciar:

Error: EACCES: permiso denegado, mkdir '/.pm2'

Probé la misma imagen en un hoster de Marathon y funcionó bien.

¿Necesito cambiar algo con UserIds?

El Dockerfile:

 FROM node:7.4-alpine RUN npm install --global yarn pm2 RUN mkdir /src COPY . /src WORKDIR /src RUN yarn install --production EXPOSE 8100 CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]

Actualizar
la imagen del nodo ya crea un nuevo "nodo" de usuario con UID 1000 para no ejecutar la imagen como root.
También traté de corregir los permisos y agregar el "nodo" del usuario al grupo raíz.
Además, le dije a pm2 qué directorio debería usar con ENV var:

PM2_HOME=/inicio/nodo/aplicación/.pm2

Pero sigo recibiendo el error:

 Error: EACCES: permission denied, mkdir '/home/node/app/.pm2'

Dockerfile actualizado:

 FROM node:7.4-alpine RUN npm install --global yarn pm2 RUN adduser node root COPY . /home/node/app WORKDIR /home/node/app RUN chmod -R 755 /home/node/app RUN chown -R node:node /home/node/app RUN yarn install --production EXPOSE 8100 USER 1000 CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]

Update2 gracias a Graham Dumpleton lo hice funcionar

 FROM node:7.4-alpine RUN npm install --global yarn pm2 RUN adduser node root COPY . /home/node/app WORKDIR /home/node/app RUN yarn install --production RUN chmod -R 775 /home/node/app RUN chown -R node:root /home/node/app EXPOSE 8100 USER 1000 CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

OpenShift ejecutará contenedores de forma predeterminada como un usuario no raíz. Como resultado, su aplicación puede fallar si requiere que se ejecute como root. Si puede configurar su contenedor para que se ejecute como root dependerá de los permisos que tenga en el clúster.

Es mejor diseñar su contenedor y aplicación para que no tenga que ejecutarse como root.

Algunas sugerencias.

  • Cree un usuario UNIX especial para ejecutar la aplicación y configure ese usuario (usando su uid), en la instrucción USER del Dockerfile . Haga que el grupo para el usuario sea el grupo raíz.

  • Permisos de reparación en el directorio /src y todo lo que se encuentra debajo de él, de modo que sea propiedad del usuario especial. Asegúrese de que todo sea raíz del grupo. Asegúrese de que cualquier cosa que necesite ser escribible sea escribible en la raíz del grupo.

  • Asegúrese de establecer HOME en /src en Dockerfile .

Una vez hecho esto, cuando OpenShift ejecuta su contenedor como un uid asignado, donde el grupo es raíz, entonces, en virtud de que todo se puede escribir en grupo, la aplicación aún puede actualizar los archivos en /src . La variable HOME que se establece garantiza que todo lo que se escriba en el directorio de inicio mediante código vaya al área de escritura /src .

over 4 years ago · Santiago Trujillo Relatório

0

También puede ejecutar el siguiente comando que otorga acceso de root al proyecto en el que inició sesión:

oc adm policy add-scc-to-user anyuid -z default

over 4 years ago · Santiago Trujillo Relatório

0

La solución de Graham Dumpleton funciona pero no se recomienda.

Openshift utilizará UID aleatorios al ejecutar contenedores.

Puede ver eso en el Yaml generado de su Pod.

 spec: - resources: securityContext: runAsUser: 1005120000

En su lugar, debe aplicar las mejores prácticas de seguridad de Docker para escribir su Dockerfile.

  1. No vincule la ejecución de su aplicación a un UID específico: haga que los recursos sean legibles (es decir, 0644 en lugar de 0640) y ejecutables cuando sea necesario.

  2. Hacer ejecutables propiedad de root y no escribibles

Para obtener una lista completa de recomendaciones, consulte: https://sysdig.com/blog/dockerfile-best-practices/

En su caso, no es necesario:

 RUN adduser node root ... RUN chown -R node:node /home/node/app USER 1000

En la pregunta original, los archivos de la aplicación ya son propiedad de root.
El siguiente chmod es suficiente para hacerlos legibles y ejecutables para el mundo.

 RUN chmod -R 775 /home/node/app
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda