Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

724
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!