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

321
Visualizações
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 Respostas
Responde à pergunta

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 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