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?
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 nommy-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.
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