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.
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:
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!