Je tente de déployer un conteneur Docker dans EC2 Container Services avec des pipelines GitLab. J'ai déjà créé le cluster dans AWS et 2 instances sont également en cours d'exécution. Le problème est qu'une fois la commandeErreur lors du déploiement d'un conteneur Docker dans EC2 Container Services via GitLab Pipeline
ecs-cli compose --file ./Documents/Development/workillence/docker-compose-test.yml service up
--container-name testContainer --container-port 8080 #--role arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole
--target-group-arn arn:aws:elasticloadbalancing:us-east-2:084622260700:targetgroup/TestTG/af0fbec5b9cc869f
est exécuté, je reçois l'erreur suivante:
WARN[0000] Skipping unsupported YAML option for service... option name=build service name=testContainer
ERRO[0001] Error registering task definition error="ClientException: Container.image should not be null or empty.\n\tstatus code: 400, request id: 27277917-8d8e-11e7-8cb2-8d5ad96f4568" family=ecscompose-workillence
ERRO[0001] Create task definition failed error="ClientException: Container.image should not be null or empty.\n\tstatus code: 400, request id: 27277917-8d8e-11e7-8cb2-8d5ad96f4568"
FATA[0001] ClientException: Container.image should not be null or empty.
Ceci est une capture d'écran de mon repo AWS:
L'image ne ne semble pas être vide.
Voici comment mon fichier CI ressemble à:
image: docker:latest
services:
- docker:dind
stages:
- build
- deploy
testBuild:
stage: build
script:
- docker version
- docker build -t 084622260700.dkr.ecr.us-east-2.amazonaws.com/testrepo:latest app/
- docker images
- docker login -u AWS -p <password> 084622260700.dkr.ecr.us-east-2.amazonaws.com
- docker push 084622260700.dkr.ecr.us-east-2.amazonaws.com/testrepo:latest
testDeploy:
stage: deploy
image: python:3-alpine
variables:
AWS_REGION: "us-east-2"
AWS_ACCESS_KEY_ID: "key"
AWS_SECRET_ACCESS_KEY: "key"
PROD_TARGET_GROUP_ARN: "arn:aws:elasticloadbalancing:us-east-2:084622260700:targetgroup/TestTG/af0fbec5b9cc869f"
ECS_CLUSTER: "testCluster"
AWS_KEY_PAIR: "testKP.pem"
AWS_VPC: "vpc-0419416d"
AWS_SUBNETS: "subnet-ad6cdfe0,subnet-ad6cdfe0,subnet-0fc1aa74"
AWS_INSTANCE_TYPE: "t2.micro"
AWS_INSTANCE_COUNT: "2" #Number of instances to scale to
AWS_ROLE: "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole"
before_script:
##### Install AWS ECS-CLI #####
- apk add --update curl
- curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest
- chmod +x /usr/local/bin/ecs-cli
script:
##### Configure ECS-CLI, run the container and scale to 2 instances #####
- ecs-cli configure --region $AWS_REGION --access-key $AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY --cluster $ECS_CLUSTER
- ecs-cli up --keypair $AWS_KEY_PAIR --capability-iam -c $ECS_CLUSTER --instance-type t2.micro --size 2 --vpc $AWS_VPC --subnets $AWS_SUBNETS --force
##### This docker-compose.yml is the one described above #####
- ecs-cli compose --file docker-compose.yml service up --target-group-arn $PROD_TARGET_GROUP_ARN --container-name app --container-port 8080 --role $AWS_ROLE
- ecs-cli compose --file docker-compose.yml service scale 2
environment:
name: ci
##### This is the URL seen under 'DNS name' when the LB was created #####
url: TestLB-1717492587.us-east-2.elb.amazonaws.com
only:
- aws
Et voici comment le fichier de composition ressemble à:
app:
image: 084622260700.dkr.ecr.us-east-2.amazonaws.com/testrepo:latest
command: yarn run start-dev
links:
- mongodb
- redis
- elasticsearch
ports:
- '8000:8000'
- '5858:5858'
- '9229:9229'
- '80:8080'
environment:
NODE_ENV: local
volumes:
- ./testrepo/.:/opt/app
mongodb:
build: docker/definitions/mongo
ports:
- "27017:27017"
redis:
build: docker/definitions/redis
ports:
- "6379:6379"
elasticsearch:
build: docker/definitions/elasticsearch
ports:
- "9200:9200"
- "9300:9300"
Avez-vous déjà fait face à la question identique ou similaire et probablement comment avez tu le résous?
Je ne devinais pas que ces services joueront un rôle dans cette erreur et je ne l'ai pas décrit mais j'utiliserai des fournisseurs externes pour mongo, redis et elasticsearch. Cela signifie qu'ils ne seront pas construits dans le paquet Docker, en plus j'ai déjà testé l'environnement localement et cela fonctionne, je suis capable de connecter les trois d'entre eux. Est-il possible de les déclarer comme externes dans le fichier de composition? –
Si elles sont externes, supprimez-les de composer. Gardez deux composer '-test.yml' et' -prod.yml'. Utilisez 'prod' pour le déploiement AWS –
Ok, je l'ai testé et encore et encore la même erreur. Je utilisé le code suivant: 'testContainer: build: 084622260700.dkr.ecr.us-east-2.amazonaws.com/testrepo:latest commande: run fil start-dev ports: - « 8000 : 8000' - '5858: 5858' - '9229: 9229' - '80: 8080' environnement: NODE_ENV: locaux volumes: - ./testrepo /.:/ opt/app' –