J'ai plusieurs instances de conteneur Amazon Elastic Container Service (Amazon ECS) avec l'agent de conteneur ECS et ces instances de conteneur sont déconnectées. Pourquoi sont-elles déconnectées ?

L'agent de conteneur ECS associe les instances de conteneur ECS à votre cluster et indique à Docker quand démarrer, s'arrêter ou interroger les conteneurs dont vous avez spécifié l'exécution. Si l'agent ne peut pas accéder au service, l'instance de conteneur ne peut pas agir en tant que membre de votre cluster ECS. Pour en savoir plus sur l'agent de conteneur, consultez Agent de conteneur Amazon ECS.

L'agent de conteneur peut se déconnecter et se reconnecter plusieurs fois par heure dans le cadre de son fonctionnement normal. Les événements de connexion qui durent quelques minutes seulement n'indiquent pas un problème avec l'agent ou l'instance de conteneur. Pour plus d'informations, consultez Événements de changement d'état des instances de conteneur.

Si l'agent de conteneur reste déconnecté pendant plus de quelques minutes, l'instance de conteneur ne peut pas fonctionner dans le cadre de votre cluster ECS. Le problème peut-être entraîné par :

  • Des problèmes de réseau qui empêchent la communication entre l'instance et ECS.
  • L'agent de conteneur qui ne dispose pas des autorisations AWS Identity and Access Management (IAM) obligatoires pour communiquer avec les points de terminaison ECS.
  • Des problèmes au niveau de l'hôte ou du daemon Docker à l'intérieur de l'instance de conteneur.

Les étapes suivantes peuvent permettre d'identifier la cause d'une défaillance. Ces commandes sont prises en charges à l'aide de l'AMI (Amazon Machine Image) optimisée pour Amazon ECS fournie par AWS.

Remarque : il est possible que vous ayez à effectuer des modifications si vous utilisez une AMI différente.

Vérifier que le daemon Docker est exécuté sur l'instance de conteneur

Pour vérifier que le daemon Docker est exécuté sur l'instance de conteneur affectée, exécutez la commande suivante :

ps aux | grep dockerd

La sortie générée lors de l'exécution de cette commande doit être semblable à ce qui suit :

root      2909  7.0  1.2 699128 52284 ?        Sl   13:29   0:04 /usr/bin/dockerd --default-ulimit nofile=1024:4096 --storage-driver devicemapper --storage-opt dm.thinpooldev=/dev/mapper/docker-docker--pool --storage-opt dm.use_deferred_removal=true --storage-opt dm.fs=ext4 --storage-opt dm.use_deferred_deletion=true

Vérifier que le daemon du conteneur Docker est exécuté sur l'instance de conteneur

Pour vérifier que le daemon de conteneur Docker est exécuté sur l'instance de conteneur affectée, exécutez la commande suivante :

ps aux | grep docker-containerd

La sortie générée lors de l'exécution de cette commande doit être semblable à ce qui suit :

root      2916  0.8  0.3 361096 12396 ?        Ssl  13:29   0:02 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc

Si ces commandes ne donnent pas les résultats attendus, arrêtez puis redémarrez le daemon Docker en exécutant la commande suivante :

sudo service docker stop && sudo service docker start

La sortie de la commande doit être composée de deux lignes indiquant un [OK] en ce qui concerne l'arrêt et le démarrage du service Docker au niveau de l'hôte.

Vérifier que l'agent de conteneur est exécuté sur l'instance de conteneur

Pour vérifier que l'agent de conteneur est exécuté sur l'instance de conteneur affectée, exécutez la commande suivante :

docker ps

Remarque : Par défaut, l'agent de conteneur utilise ecs-agent comme nom de conteneur Docker, mais cela peut varier si vous exécutez le conteneur vous-même.

Si l'agent de conteneur ECS n'est pas en cours d'exécution, démarrez-le en exécutant la commande suivante :

sudo start ecs

Si le cluster ECS est toujours déconnecté après le lancement de l'agent de conteneur, vérifiez que le profil d'instance IAM associé à l'instance de conteneur dispose des autorisations IAM nécessaires.

Vérifier que le profil d'instance IAM dispose des autorisations nécessaires

À l'aide de la console IAM ou de l'interface ligne de commande AWS (AWS CLI), vérifiez si le profil d'instance associé aux instances de conteneur répond aux conditions requises .

Analysez le fichier journal de l'agent de conteneur au niveau de l'instance et vérifiez qu'il ne contient pas d'erreurs liées aux informations d'identification. Le journal de l'agent de conteneur fait l'objet d'une rotation toutes les heures et le suffixe est modifié automatiquement de façon à refléter la date et l'heure en cours. Exécutez la commande suivante pour afficher une liste des journaux ECS :

cat /var/log/ecs/ecs-agent.log.2017-10-24-13

Remarque : mettez à jour la commande de façon à inclure la plage de dates correspondant au moment où le problème s'est produit.

Si l'agent de conteneur ne dispose pas des informations d'identification nécessaires, vous verrez une erreur similaire à ce qui suit dans les journaux :

2017-10-24T13:48:59Z [INFO] Registering Instance with ECS
2017-10-24T13:48:59Z [ERROR] Could not register: NoCredentialProviders: no valid providers in chain. Deprecated.
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors
2017-10-24T13:48:59Z [CRITICAL] Could not create cluster: NoCredentialProviders: no valid providers in chain. Deprecated.
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors
2017-10-24T13:48:59Z [ERROR] Error registering: NoCredentialProviders: no valid providers in chain. Deprecated.
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 04/08/2016

Date de mise à jour : 19/07/2018