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

1.6K
Views
¿Cómo puedo ejecutar un comando npm en un contenedor docker?

Estoy tratando de ejecutar una aplicación angular en modo de desarrollo dentro de un contenedor docker, pero cuando lo ejecuto con docker-compose build funciona correctamente, pero cuando intento instalar el contenedor, aparece el siguiente error:

 ERROR: for sypgod Cannot start service sypgod: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"npm\": executable file not found in $PATH

El verdadero problema es que no reconoce el comando npm serve, pero ¿por qué?

La configuración sería la siguiente:

Contenedor Docker (Nginx Reverse proxy -> Angular ejecutándose en el puerto 4000)

Sé que hay mejores formas de implementar esto, pero en este momento necesito esta configuración por algunas razones personales.

archivo acoplable:

 FROM node:10.9 COPY package.json package-lock.json ./ RUN npm ci && mkdir /angular && mv ./node_modules ./angular WORKDIR /angular RUN npm install -g @angular/cli COPY . . FROM nginx:alpine COPY toborFront.conf /etc/nginx/conf.d/ EXPOSE 8080 CMD ["nginx", "-g", "daemon off;"] CMD ["npm", "serve", "--port 4000"]

NginxServerSitio

 server{ listen 80; server_name sypgod; location / { proxy_read_timeout 5m; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:4000/; } }

Archivo Docker Compose (la parte importante donde tengo el problema)

 sypgod: # The name of the service container_name: sypgod # Container name build: context: ../angular dockerfile: Dockerfile # Location of our Dockerfile
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La imagen que finalmente se está ejecutando es esta:

 FROM=nginx:alpine COPY toborFront.conf /etc/nginx/conf.d/ EXPOSE 8080 CMD ["npm", "serve", "--port 4000"]

La primera etapa no tiene ningún efecto (podría COPY --from=... archivos), y si hay varios CMD , solo el último tiene efecto. Dado que está ejecutando esto en una imagen nginx simple, no hay un comando npm , lo que genera el error que ve.

Recomendaría usar Node en el host para un entorno de desarrollo en vivo. Cuando haya creado y probado su aplicación y esté buscando implementarla, use Docker si es apropiado. En su Dockerfile, ejecute ng build en la primera etapa para compilar la aplicación en archivos estáticos, agregue COPY --from=... en la segunda etapa para obtener la aplicación compilada en la imagen de Nginx y elimine todas las líneas CMD ( nginx tiene un CMD predeterminado apropiado). La respuesta de @VikramJakhar tiene un Dockerfile más completo que muestra esto.

Parece que podría estar intentando ejecutar Nginx y el servidor de desarrollo Angular en Docker. Si ese es su objetivo, debe ejecutarlos en dos contenedores separados. Para hacer esto:

  • Divide este Dockerfile en dos. Coloque la CMD ["npm", "serve"] al final del primer Dockerfile (solo angular).

  • Agregue un segundo bloque en el archivo docker-compose.yml para ejecutar el segundo contenedor. El contenedor npm serve backend no necesita publicar ports: .

  • Cambie el nombre de host del servidor backend en la configuración de Nginx de localhost al nombre de Docker Compose del otro contenedor.

over 4 years ago · Santiago Trujillo Report

0

Parece que no se puede acceder al npm desde el contenedor. Intenta definir desde dónde intenta ejecutarlo:

 docker run -v "$PWD":/usr/src/app -w /usr/src/app node:10.9 npm serve --port 4000

fuente: https://gist.github.com/ArtemGordinsky/b79ea473e8bc6f67943b

También asegúrese de que npm esté instalado en la computadora que ejecuta el contenedor docker.

over 4 years ago · Santiago Trujillo Report

0

Puedes hacer algo como a continuación

 ### STAGE 1: Build ### # We label our stage as 'builder' FROM node:alpine as builder RUN apk --no-cache --virtual build-dependencies add \ git \ python \ make \ g++ RUN mkdir -p /ng-app/dist WORKDIR /ng-app COPY package.json package-lock.json ./ ## Storing node modules on a separate layer will prevent unnecessary npm installs at each build RUN npm install COPY . . ## Build the angular app in production mode and store the artifacts in dist folder RUN npm run ng build -- --prod --output-path=dist ### STAGE 2: Setup ### FROM nginx:1.14.1-alpine ## Copy our default nginx config COPY toborFront.conf /etc/nginx/conf.d/ ## Remove default nginx website RUN rm -rf "/usr/share/nginx/html/*" ## From 'builder' stage copy over the artifacts in dist folder to default nginx public folder COPY --from=builder /ng-app/dist /usr/share/nginx/html CMD ["nginx", "-g", "daemon off;"]
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!