Зображення докера натисніть у сховище Amazon ecs


78

Я новачок у AWS. Я хочу створити приватне сховище докерів на екземплярі контейнера AWS ECS. Я створив сховище з ім'ям name. Приклади команд push, показаних AWS, працюють.

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

Але за допомогою цих команд я будую і штовхаю зображення з іменем, nameі я хочу створити зображення з іменем foo. Тож я змінив команди, щоб:

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

Це має спрацювати, але ні. Після періоду повторних спроб я отримую помилку:

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 вимагає спеціального сховища для кожного зображення, яке я хочу надрукувати?

Відповіді:


81

EC2 Контейнер реєстр вимагає Repository зображення , щоб бути встановлена для кожного зображення «назви» або «простір імен / ім'я» ви хочете опублікувати в реєстр.

Ви можете опублікувати будь-що, :tagsщо завгодно, у кожному сховищі (типовим обмеженням є 100 тегів).

Я ніде не бачив у документації AWS, де конкретно вказано сховище -> відображення імен зображень, але це передбачається створенням сховища - Розділ 6d у Посібнику користувача ECR

Специфікація Docker Image включає визначення сховища

Сховище

Колекція тегів, згрупованих під загальним префіксом (компонент імені раніше :). Наприклад, на зображенні, позначеному іменем my-app:3.1.4, my-app є компонентом сховища імені. Ім'я сховища складається з розділених косою рискою компонентів імен, які за бажанням мають префікс імені хосту DNS. Ім'я хосту повинно відповідати стандартним правилам DNS, але не може містити _символів. Якщо ім’я хосту присутнє, воно може необов’язково супроводжуватися номером порту у форматі :8080. Компоненти імен можуть містити малі символи, цифри та роздільники. Розділювач визначається як крапка, одне або два підкреслення або одне або кілька тире. Компонент імені не може починатися або закінчуватися роздільником.


6
Чи існує якась документація, в якій прямо вказано одне зображення на реєстр?
HHC

так, вибачте, я мав на увазі одне ім'я зображення для кожного сховища.
HHC

4
ах .. Я не думаю, що AWS прямо заявляє, що їхня концепція репозиторію ECR стосується одного зображення Docker nameабо namespace/name. Перший раз це зайняло пару спроб це зрозуміти. Розділ 6d документа docs.aws.amazon.com/AmazonECR/latest/userguide/ ... передбачає налаштування сховища одного імені / декількох тегів із тегом побудови зображенняrepository:latest
Мат,

6
@Matt Я хотів би, щоб вони (aws) зафіксували це і зробили це важким фактом. Я не люблю вільних інтерпретацій, оскільки написано їхній документ.
Куберхаун,

1
supersedes - сильний термін, який Docker маркетинг хотів би, щоб ви придбали. концентратор нікуди не дівається, і навіть може бути джерелом для "безкоштовного" образу магазину.
Метт

46

Вам потрібно створити сховище для кожного імені зображення, але ім'я зображення може мати форму "mycompanyname / helloworld". Таким чином , ви створюєте mycompanyname/app1, mycompanyname/app2і т.д.

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

1
що спрацювало, до речі ACR не вимагає спочатку створювати повторення вручну.
Тіло

також здається, що зображення потрібно штовхати, якщо різні "
Тіло

1

Я спробував наступні кроки і підтвердив роботу для мене:

  1. aws ecr get-login-password --region us-west-2 | логін докера - ім'я користувача AWS --password-stdin xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com

  2. aws ecr create-repository --repository-name test

  3. docker build -t test.

  4. тест тесту докера: останні xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/test:latest

  5. docker push xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/test:latest


0

Додаток до вищезазначеної відповіді, я зіткнувся тут сьогодні, оскільки команда входу змінюється за допомогою aws-cli v2, розміщення відповіді може допомогти іншим. оскільки aws-cli v1команда входу більше не працює.

V1
$(aws ecr get-login --no-include-email)

Для надсилання зображення до ECR за допомогою aws-cli v2 вам потрібно

aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-west-2.amazonaws.com

Тоді ви в порядку, щоб побудувати і натиснути

docker build -t myrepo .
docker tag myrepo:latest 123456789.dkr.ecr.us-west-2.amazonaws.com/myrepo
docker push 123456789.dkr.ecr.us-west-2.amazonaws.com/myrepot

Зазвичай одне зображення для реєстру є чистим підходом, тому AWS збільшує зображення для кожного сховища та сховища в регіоні з 1000 до 10000.


-5

Не потрібно створювати репо для кожного зображення, просто реструктуризуйте імена:

docker build -t foo .
docker tag foo ####.dkr.ecr.us-west-2.amazonaws.com/name:foo_v0.23.1
docker push ####.dkr.ecr.us-west-2.amazonaws.com/name:foo_v0.23.1

Так, але використання тегів для диференціації зображень - це безглуздий спосіб робити щось.
dwjohnston

Жахливе рішення, теги - це те, як ми
версуємо

Як випливає із наведених вище коментарів, це анти-шаблон. Той, який при використанні у більших командах розробників може легко виявити помилку. Вам краще скористатися сценарієм рішення. Щось на зразок: gist.github.com/jmervine/b1835fa3bfcea9eaa9bf2521291f0615
jmervine

3
@jmervine "краще", а не "краще".
Проникність

Це здається цілком розумним для деяких сценаріїв. Наприклад, багато популярних сховищ докерів використовують цей метод, щоб розрізнити "смаки" зображення, наприклад nginx:alpinevsnginx:perl
jchook
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.