es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El contenedor Docker funciona, pero falla cuando se crea desde docker-compose.

Tengo una aplicación con 3 contenedores:
cliente – una aplicación Angular,
gateway – una aplicación .NET Core,
api – una aplicación .NET Core

Estoy teniendo problemas con el contenedor que aloja la aplicación Angular.
Aquí está mi archivo Docker:

stage 1

FROM node:alpine as node
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build

stage 2

FROM nginx:alpine
COPY --from=node /app/dist/caliber_client /usr/share/nginx/html
EXPOSE 80

y aquí está el archivo de Docker Compose:

Por favor, consulta https://aka.ms/HTTPSinContainer para obtener instrucciones sobre cómo configurar un certificado de desarrollador HTTPS para tu servicio ASP .NET Core.

version: '3.4'

services:
  calibergateway:
    image: calibergateway
    container_name: caliber-gateway
    build:
      context: .
      dockerfile: caliber-gateway/Dockerfile
    ports:
      - 7000:7000
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    networks:
      - caliber-local

  caliberapi:
    image: caliberapi
    container_name: caliber-api
    build:
      context: .
      dockerfile: caliber-api/Dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    networks:
      - caliber-local

  caliberclient:
    image: caliber-client-image
    container_name: caliber-client
    build:
      context: .
      dockerfile: caliber-client/Dockerfile
    ports:
      - 7005:7005
    networks:
      - caliber-local

networks:
  caliber-local:
    external: true

Cuando construyo y ejecuto el contenedor Angular de forma independiente, puedo conectarme y ejecutar el sitio, sin embargo, si intento construirlo con docker-compose, obtengo el siguiente error:

enoent ENOENT: no such file or directory, open '/app/package.json'

Puedo ver que npm no puede encontrar el package.json, pero estoy copiando todo el sitio al directorio /app en el archivo Docker, así que no estoy seguro de dónde está el problema.

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el contexto de construcción en el archivo docker-compose. En el archivo docker-compose, el contexto está configurado como “.”, lo que significa que el contexto es el directorio raíz del proyecto. Sin embargo, en el Dockerfile del contenedor de cliente, el WORKDIR está configurado como “/app”. Esto significa que cuando el archivo docker-compose intenta construir el contenedor de cliente, no puede encontrar el archivo package.json porque no se encuentra en el directorio raíz del proyecto.

    Para solucionar este problema, puedes actualizar el contexto en el archivo docker-compose para que apunte al directorio donde se encuentra el Dockerfile del contenedor de cliente. Por ejemplo:

    build:
      context: ./caliber_client
      dockerfile: Dockerfile
    

    Esto asegurará que el proceso de construcción del contenedor de cliente se realice en el directorio correcto y que se pueda encontrar el archivo package.json. Además, asegúrate de que la estructura de directorios en tu proyecto coincida con el contexto especificado en el archivo docker-compose.

    ¡Espero que esto ayude!

Comments are closed.