web-dev-qa-db-fra.com

Transférer l'image du menu fixe dans le référentiel Amazon ecs

Je suis nouveau sur AWS. Je souhaite configurer un référentiel de menu fixe privé sur une instance de conteneur AWS ECS. J'ai créé un référentiel nommé name. Les exemples de commandes Push affichées par AWS fonctionnent.

aws ecr get-login --region us-west-2 
docker build -t name .
docker tag name:latest ############.dkr.ecr.us-west-2.amazonaws.com/name:latest 
docker Push ############.dkr.ecr.us-west-2.amazonaws.com/name:latest

Mais avec ces commandes, je construis et pousse une image nommée name et je veux construire une image nommée foo. J'ai donc modifié les commandes pour:

docker build -t foo .
docker tag foo ###########.dkr.ecr.us-west-2.amazonaws.com/name/foo
docker Push ###########.dkr.ecr.us-west-2.amazonaws.com/name/foo

Cela devrait marcher, mais ça ne marche pas. Après une période de tentatives, j'obtiens l'erreur suivante:

The Push refers to a repository [###########.dkr.ecr.us-west-2.amazonaws.com/name/foo]
8cc63cf4528f: Retrying in 1 second
...
name unknown: The repository with name 'name/foo' does not exist in the registry with id '############'

AWS a-t-il vraiment besoin d'un référentiel dédié pour chaque image que je souhaite diffuser?

57
Ohmen

Le EC2 Container Registry nécessite l'installation d'un référentiel d'images pour chaque image "nom" ou "espace de noms/nom" que vous souhaitez publier dans le registre.

Vous pouvez publier n'importe quel :tags vous voulez cependant dans chaque référentiel (la limite par défaut est de 100 balises).

Je n'ai vu nulle part dans la documentation AWS indiquer spécifiquement le référentiel -> le mappage du nom d'image, mais cela est impliqué par Création d'un référentiel - Section 6d du Guide de l'utilisateur ECR

Le spécification d'image Docker inclut sa définition d'un référentiel

Repository

Une collection de balises regroupées sous un préfixe commun (le composant name avant :). Par exemple, dans une image étiquetée avec le nom my-app:3.1.4, my-app est le composant Repository du nom. Un nom de référentiel est constitué de composants de noms séparés par des barres obliques, éventuellement précédés du nom d'hôte DNS. Le nom d'hôte doit être conforme aux règles DNS standard, mais ne peut pas contenir _ personnages. Si un nom d’hôte est présent, il peut éventuellement être suivi d’un numéro de port au format :8080. Les composants de nom peuvent contenir des caractères minuscules, des chiffres et des séparateurs. Un séparateur est défini comme une période, un ou deux traits de soulignement ou un ou plusieurs tirets. Un composant de nom ne peut pas commencer ou se terminer par un séparateur.

59
Matt

Vous devez créer un référentiel pour chaque nom d'image, mais le nom de l'image peut être de la forme "mycompanyname/helloworld". Donc, vous créez mycompanyname/app1, mycompanyname/app2, etc

aws ecr create-repository --repository-name mycompanyname/helloworld
aws ecr create-repository --repository-name mycompanyname/app1
aws ecr create-repository --repository-name mycompanyname/app2
docker tag helloworld:latest xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/helloworld:latest
docker Push xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/helloworld:latest
docker tag app1:latest xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/app1:latest
docker Push xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/app1:latest
23
ecerulm