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

323
Vistas
Problemas al ejecutar la instalación de npm durante la compilación de docker-compose

Tengo una imagen acoplable que instala ubuntu y RUN algunos comandos adicionales, como instalar NodeJS.

El Dockerfile (en combinación con un docker-compose.yml ) también monta un directorio en un directorio en el host. Eso se ve así:

 services: test: build: context: ../../ dockerfile: docker/Dev/Dockerfile ports: - 7000:7000 volumes: - ./../../src:/src

En el Dockerfile tengo las siguientes líneas para un volumen:

 VOLUME ["/src"] WORKDIR /src

Cuando ejecuto el contenedor con docker-compose up y luego hago un ls -a dentro de la carpeta src/ montada del contenedor, veo todos los archivos que también veo en el host. Hasta aquí todo bien.

(El comando que ejecuto también mira dentro del contenedor: docker exec -it <container hash> ls -a )

Dado que todos los archivos parecen estar allí, incluido un package.json , agregué un nuevo comando Dockerfile RUN es: npm install . Así que tengo esto:

 VOLUME ["/src"] WORKDIR /src RUN npm install

Excepto que me da un error de que no puede encontrar un package.json en la carpeta src/ .

Cuando agrego un RUN ls -a (recuerde, cambié a la carpeta src/ con WORKDIR ), luego muestra que es un directorio vacío...

Entonces en Dockerfile tengo:

 VOLUME ["/src"] WORKDIR /src # shows that /src is empty. If I do 'RUN pwd', then it shows I really am in /src RUN ls -a RUN npm install

Pero aún así, después de hacer un docker-compose up y luego volver a hacer un ls -a dentro de la carpeta /src del contenedor, muestra todos mis archivos fuente nuevamente.

Entonces mi pregunta es, ¿por qué no están allí durante el tiempo de compilación (estoy ejecutando docker-compose build )?

¿Cuál es la forma de solucionar este problema?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Está malinterpretando la diferencia entre el comando VOLUME en un Dockerfile y el indicador -v en el demonio docker (lo que usa docker-compose para sus volúmenes).

Los valores debajo de la clave de volumes en su archivo docker-compose le dicen a docker qué directorios mapear después de que su imagen haya terminado de construirse. No se utilizan durante el proceso de compilación.

Afortunadamente, automáticamente tiene acceso a todos sus archivos de origen, debido a la línea de context en su archivo de composición: ¡solo están en el directorio src local, no en su directorio de trabajo actual!

Intente actualizar su Dockerfile a lo siguiente:

 # NOTE: You don't want a VOLUME directive if you only want to mount a local # directory. WORKDIR is optional, but doesn't matter for my example, # so I'm omitting it. # Copy the npm files into your Docker image. If you do this first, the docker # daemon can cache the built layers, making your images build faster and be # substantially smaller, since most of your dependencies will remain unchanged # between builds. COPY src/package.json package.json COPY src/npm-shrinkwrap.json npm-shrinkwrap.json # Actually install the dependencies. RUN npm install # Copy all of your source files from the `src` directory into the Docker image. COPY src .

Ahora, un problema aquí: probablemente ya tenga sus módulos npm instalados en src/node_modules . Por lo tanto, puede deshacerse de todo lo anterior, excepto la línea COPY final, o puede agregar src/node_modules a un archivo .dockerignore en su raíz de compilación ( ../.. ).

about 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