Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

727
Vistas
Docker CMD no reconoce el tiempo de ejecución de pm2

Estoy tratando de crear una imagen acoplable que combine nginx y pm2, pero cuando intento ejecutar pm2 de esta manera, pero cuando lo ejecuto de esa manera, aparece el siguiente error:

 /bin/sh: [pm2-runtime,: not found

Lo extraño es que si anulo el CMD y lo uso así:

 sudo docker run -it -p 80:80 frontend-test pm2-runtime

RECONOCE que pm2(-runtime) está instalado. ¿Alguien tiene una idea de cómo puede suceder esta magia negra? La versión anterior generaba las páginas nuxt y las servía estáticamente a través de Nginx, pero ahora quiero convertir eso para usar el modo SSR de nuxt. Mi objetivo es ejecutar la aplicación y luego el proxy inverso a través de Nginx (lo que parece funcionar, excepto que pm2 no quiere ejecutarse). ¡Gracias por adelantado!

A continuación se muestra una versión (un poco simplificada) de mi Dockerfile:

 ### BUILD STAGE ### FROM node:10-alpine as build-stage WORKDIR /app # Copy only package(-lock).json to enable docker caching COPY /index/package*.json /app/index/ # Install packages before copying source code to use cache where possible WORKDIR /app/index RUN npm install # Copy source code WORKDIR /app COPY . . # Build source code WORKDIR /app/index RUN npm run build ### END BUILD STAGE ### ### PRODUCTION STAGE ### FROM nginx:1.17-alpine as production-stage ARG env_name=dev # Install system dependencies (nodejs to run pm2) RUN apk add --update nodejs nodejs-npm # Copy transpiled sourcecode to production image COPY --from=build-stage /app/index/.nuxt /app/index # Copy config files to production image WORKDIR /app COPY deployment/pm2.js ./ecosystem.config.js COPY deployment/nginx.${env_name}.conf /etc/nginx/nginx.conf # Install pm2 globally RUN npm install pm2 -g RUN pm2 list EXPOSE 80 CMD ["pm2-runtime", "start", "--env", ${env_name}, "&&", "nginx", "-g", "daemon off;"] ### END PRODUCTION STAGE
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El problema era que la directiva CMD no puede manejar varios comandos de forma inmediata.

Cambiar el CMD a la siguiente línea solucionó mi problema:

 CMD ["sh", "-c", "nginx && pm2-runtime start ecosystem.config.js --env $env_name"]

Docker CMD & ENTRYPOINT ejecuta los comandos implícitamente con sh -c, pero para encadenar comandos y/o inyectar variables de entorno, debe "anidar" el sh -c de docker con el suyo propio.

over 4 years ago · Santiago Trujillo Denunciar

0

¿Estás seguro de que estás definiendo el CMD como tal?

CMD [ "pm2-runtime", "start", "pm2.json" ]

porque por lo que veo, el mensaje de error dice que está buscando [pm2-runtime, (tenga en cuenta [ al principio , al final) y esto solo es posible si no tiene las comillas alrededor de pm2- tiempo de ejecución Le sugiero que elimine y escriba esas comillas nuevamente, guarde el Dockerfile e intente construir nuevamente.

Acabo de probar con un ejemplo simple

 FROM alpine CMD [echo, "'A'" ]

Y recibió un mensaje de error similar

 /bin/sh: [echo,: not found

Así que estoy bastante seguro de que este es el caso.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda