Ошибка "Неверная конфигурация для реестра" при выполнении "eb local run"
Я думаю, что это очень легко исправить проблему, но я просто не могу ее решить!
Я потратил много времени на поиск потенциальных клиентов в Google/SO, но не решил.
Я получаю Неверную конфигурацию для реестра при выполнении eb local run
{17-05-17 10:22}[2.3.1]me:~/Repositories/[email protected]✗✗✗✗✗✗ chris% eb local run
ERROR: InvalidConfigFile :: Invalid configuration for registry 12345678.dkr.ecr.eu-west-1.amazonaws.com
{17-05-17 10:22}[2.3.1]me:~/Repositories/[email protected]✗✗✗✗✗✗ chris%
Линии изображений в моем Dockerrun.aws.json следующие:
{
"AWSEBDockerrunVersion": 2,
"volumes": [
{
"name": "frontend",
"host": {
"sourcePath": "/var/app/current/frontend"
}
},
{
"name": "backend",
"host": {
"sourcePath": "/var/app/current/backend"
}
},
{
"name": "nginx-proxy-conf",
"host": {
"sourcePath": "/var/app/current/config/nginx"
}
},
{
"name": "nginx-proxy-content",
"host": {
"sourcePath": "/var/app/current/content/"
}
},
{
"name": "nginx-proxy-ssl",
"host": {
"sourcePath": "/var/app/current/config/ssl"
}
}
],
"containerDefinitions": [
{
"name": "backend",
"image": "123456.dkr.ecr.eu-west-1.amazonaws.com/backend:latest",
"Update": "true",
"essential": true,
"memory": 512,
"mountPoints": [
{
"containerPath": "/app/backend",
"sourceVolume": "backend"
}
],
"portMappings": [
{
"containerPort": 4000,
"hostPort": 4000
}
],
"environment": [
{
"name": "PORT",
"value": "4000"
},
{
"name": "MIX_ENV",
"value": "dev"
},
{
"name": "PG_PASSWORD",
"value": "xxsaxaax"
},
{
"name": "PG_USERNAME",
"value": "
},
{
"name": "PG_HOST",
"value": "123456.dsadsau89das.eu-west-1.rds.amazonaws.com"
},
{
"name": "FE_URL",
"value": "http://develop1.com"
}
]
},
{
"name": "frontend",
"image": "123456.dkr.ecr.eu-west-1.amazonaws.com/frontend:latest",
"Update": "true",
"essential": true,
"memory": 512,
"links": [
"backend"
],
"command": [
"npm",
"run",
"production"
],
"mountPoints": [
{
"containerPath": "/app/frontend",
"sourceVolume": "frontend"
}
],
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000
}
],
"environment": [
{
"name": "REDIS_HOST",
"value": "www.eample.com"
}
]
},
{
"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 3000
}
],
"links": [
"backend",
"frontend"
],
"mountPoints": [
{
"sourceVolume": "nginx-proxy-content",
"containerPath": "/var/www/html"
},
{
"sourceVolume": "awseb-logs-nginx-proxy",
"containerPath": "/var/log/nginx"
},
{
"sourceVolume": "nginx-proxy-conf",
"containerPath": "/etc/nginx/conf.d",
"readOnly": true
},
{
"sourceVolume": "nginx-proxy-ssl",
"containerPath": "/etc/nginx/ssl",
"readOnly": true
}
]
}
],
"family": ""
}
Ответы
Ответ 1
Кажется, что у вас есть файл конфигурации с отключенным файлом docker-реестра. В вашем доме этот файл ~/.docker/config.json
должен выглядеть примерно так:
{
"auths": {
"https://1234567890.dkr.ecr.us-east-1.amazonaws.com": {
"auth": "xxxxxx"
}
}
}
Это генерируется командой docker login
(связанной с aws ecr get-login
)
Проверьте это. Я говорю это, потому что вы входите в исключение здесь:
for registry, entry in six.iteritems(entries):
if not isinstance(entry, dict):
# (...)
if raise_on_error:
raise errors.InvalidConfigFile(
'Invalid configuration for registry {0}'.format(registry)
)
return {}
Ответ 2
Это связано с устаревшими зависимостями в текущей версии инструмента awsebcli
. Они прикололи версию "docker-py ( >= 1.1.0, <= 1.7.2)", которая не поддерживает новые вспомогательные форматы учетных данных. Последняя версия docker-py
является первой, которая должным образом поддерживает последний вспомогательный формат учетных данных и до тех пор, пока разработчики AWS EB CLI не обновят docker-py
, чтобы использовать 2.4.0 (https://github.com/docker/docker-py/releases/tag/2.4.0), это будет нарушено.
Ответ 3
Во-первых, он недействителен json, поле PG_USERNAME не содержит прилагаемой цитаты.
{
"name": "PG_USERNAME",
"value": "
},
Должно быть
{
"name": "PG_USERNAME",
"value": ""
},
Следующее, что нужно проверить, - проверить, имеет ли ваш профиль экземпляра Beanstalk доступ к реестру ecr.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/iam-instanceprofile.html
Задает базовое изображение Docker в существующем репозитории Docker, из которого вы создаете контейнер Docker. Укажите значение ключа Name в формате/для изображений на Docker Hub или//для других сайтов.
Когда вы указываете образ в файле Dockerrun.aws.json, каждый экземпляр в вашей среде Elastic Beanstalk будет запускать докеры на этом изображении и запускать его. Дополнительно можно добавить ключ обновления. Значение по умолчанию - "Истина" и инструктирует Elastic Beanstalk проверять репозиторий, извлекать любые обновления для изображения и перезаписывать любые кешированные изображения.
Не указывайте ключ изображения в файле Dockerrun.aws.json при использовании файла Docker..Elastic Beanstalk всегда будет создавать и использовать изображение, описанное в файле Docker, когда он присутствует.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html
Протестируйте, чтобы убедиться, что вы также можете получить доступ к вашему ecr за пределами Elasticbeanstalk.
$ docker pull aws_account_id.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:latest
latest: Pulling from amazonlinux
8e3fa21c4cc4: Pull complete
Digest: sha256:59895a93ba4345e238926c0f4f4a3969b1ec5aa0a291a182816a4630c62df769
Status: Downloaded newer image for aws_account_id.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:latest
http://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html