Аутентификация частного реестра Docker в AMI, оптимизированном для aws ecs, не выполняется

Я пишу сценарий terraform для создания кластера автоматического масштабирования ECS. Я создал кластер и добавил в него экземпляры контейнера ec2. Мой файл определения задачи содержит изображение из частного репозитория докеров. Я просматриваю официальную документацию aws и нахожу страницу для Аутентификация частного реестра и попробовал оба описанных здесь способа.

  1. используя dockercfg
  2. докер путь

Я поместил свой файл ecs.config в корзину S3, и во время загрузки экземпляра я передал пользовательские данные как

#!/bin/bash
yum install -y aws-cli
aws s3 cp s3://<my_bucket_name>/ecs.config /etc/ecs/ecs.config

Во втором подходе я передавал используемые данные как

echo "ECS_ENGINE_AUTH_TYPE=docker" >>/etc/ecs/ecs.config
echo "ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"[email protected]"}}"  >>/etc/ecs/ecs.config

Я нахожу данные в моем /etc/ecs/ecs.config при входе в мой экземпляр контейнера, но когда я пытаюсь вытащить изображение вручную, я показываю мне ошибку, что изображение не найдено.

Затем я пробую команду входа в докер и вручную ввожу свои учетные данные и снова пытаюсь вытащить этот образ, и в конечном итоге это было успешным.

Я не уверен, есть ли способ достичь частной аутентификации реестра докеров в оптимизированном для ecs образе автоматически по пользовательским данным или нет, или если я что-то делаю не так.

Пожалуйста, помогите мне в этом.

введите описание изображения здесь


person Vaibhav Jain    schedule 17.03.2016    source источник


Ответы (1)


когда я пытаюсь вытащить изображение вручную, я показываю ошибку, что изображение не найдено

Метод, который вы используете, предоставляет агенту ECS учетные данные частного реестра, но не Docker CLI (Docker CLI хранит свои учетные данные в другом месте). Поскольку вы настроили учетные данные для агента, вы должны иметь возможность запускать определение задачи, ссылаясь на образ в вашем частном реестре, без ручного извлечения образа из Docker CLI.

Изменить: похоже, что у вас, вероятно, есть ошибка в вашем /etc/ecs/ecs.config файле на экземпляре из-за того, как вы цитируете команду echo. Вы захотите изменить эту строку:

echo "ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"[email protected]"}}"  >>/etc/ecs/ecs.config

to

echo 'ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"[email protected]"}}'  >>/etc/ecs/ecs.config
person Samuel Karp    schedule 17.03.2016
comment
Спасибо, Самуэль, за ответ. Но каким-то образом агенту ecs не удается извлечь это изображение. - person Vaibhav Jain; 17.03.2016
comment
Можете ли вы проверить, что на самом деле оказалось в /etc/ecs/ecs.config на вашем хосте? Похоже, что ваши цитаты не работают должным образом в вашем echo "ECS_ENGINE_AUTH_DATA.... Если вы измените двойные кавычки, окружающие все, на одинарные (например, echo 'ECS_ENGINE_AUTH_DATA={"https://..., это может решить вашу проблему. - person Samuel Karp; 17.03.2016
comment
В сообщении об ошибке указано, что ОСТАНОВЛЕН (основной контейнер в задаче завершен). Я также добавил снимок экрана моей страницы с ошибкой, может быть, это поможет вам. - person Vaibhav Jain; 17.03.2016
comment
Я отредактировал свой ответ, чтобы показать, что, вероятно, не так в вашем скрипте пользовательских данных. Вы захотите подключиться к экземпляру по ssh и посмотреть файл /etc/ecs/ecs.config, чтобы убедиться, что он правильный. - person Samuel Karp; 17.03.2016
comment
Спасибо, Сэм. Это работает. Я заменил двойные кавычки на одинарные. - person Vaibhav Jain; 17.03.2016