Estoy tratando de implementar una aplicación nodejs docker-compose en aws ecs, así es como se ve mi archivo docker compose:
version: '3.8' services: sampleapp: image: jeetawt/njs-backend build: context: . ports: - 3000:3000 environment: - SERVER_PORT=3000 - CONNECTIONSTRING=mongodb://mongo:27017/isaac volumes: - ./:/app command: npm start mongo: image: mongo:4.2.8 ports: - 27017:27017 volumes: - mongodb:/data/db - mongodb_config:/data/configdb volumes: mongodb: mongodb_config:
Sin embargo, cuando intento ejecutarlo usando docker compose up después de crear el contexto ecs, arroja el siguiente error:
WARNING services.build: unsupported attribute ECS Fargate does not support bind mounts from host: incompatible attribute
No estoy especificando ningún lugar en el que me gustaría usar Fargate
para esto. ¿Hay alguna forma de que aún pueda implementar la aplicación usando ec2 en lugar de Fargate
?
El modo predeterminado es Fargate. Presumiblemente, no ha especificado un clúster ecs con instancias ec2 en su comando de ejecución.
Su docker compose tiene un montaje de vinculación, por lo que su tarea debería implementarse en una instancia donde funcione el montaje.
Este ejemplo analiza la implementación en un clúster respaldado por ec2. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-ec2.html
Fargate es el predeterminado y no hay forma de decirle que desea implementar en EC2 en su lugar. Sin embargo, hay situaciones en las que tenemos que implementar en EC2 cuando Fargate no puede proporcionar las funciones requeridas (por ejemplo, GPU).
Si realmente necesita usar montajes de enlace y necesita una instancia EC2, puede usar este truco (no lo he hecho, así que básicamente estoy haciendo una lluvia de ideas aquí):
docker compose convert
Incluso puede automatizar esto con algún circo sed
si realmente lo necesita.
Como dije, no lo he probado y no estoy seguro de cuán viable podría ser. Pero no sería demasiado complejo, supongo.