Docker Watchtower не может получить новый образ из AWS ECR
Я установил Watchtower и следил за документами по настройке аутентификации частного реестра с помощью помощников аутентификации. В режиме отладки я вижу, что он регистрирует сообщение о том, что значение аутентификации было получено, но затем он не может получить изображение без "базовых учетных данных". Проверяя значение аутентификации, это просто имя хоста из моей конфигурации, а не учетные данные. Я подтвердил, что в хост-системе (Raspbian) я могу загрузить новую версию, используя ту же конфигурацию докера, без необходимости выполнять какую-либо пользовательскую аутентификацию, все работает из коробки, используя тот же двоичный файл.
Вот моя конфигурация докера:
{
"auths" : {
"0000000000.dkr.ecr.us-east-1.amazonaws.com" : {}
},
"credHelpers": {
"0000000000.dkr.ecr.us-east-1.amazonaws.com": "ecr-login"
}
}
Вот мой докер:
version: "3"
services:
cavo:
image: 0000000000.dkr.ecr.us-east-1.amazonaws.com/test:1
ports:
- "8080:80"
restart: always
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /root/.docker/config.json:/config.json
- /usr/bin/docker-credential-ecr-login:/bin/docker-credential-ecr-login
environment:
- AWS_REGION=us-east-1
- AWS_ACCESS_KEY_ID=AAAAAAAAAAAAA
- AWS_SECRET_ACCESS_KEY=aaaaaaaaaaaaaaa
command: --debug --interval 30
restart: always
И когда сторожевая башня пытается проверить наличие нового изображения, вот файл журнала:
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Pulling 0000000000.dkr.ecr.us-east-1.amazonaws.com/test:1 for /root_test_1"
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Loaded auth credentials { 0000000000.dkr.ecr.us-east-1.amazonaws.com } from /config.json"
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Got auth value: eyJzZXJ2ZXJhZGRyZXNzIjoiMDAwMDAwMDAwMC5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIn0="
watchtower_1 | time="2019-12-25T22:49:34Z" level=debug msg="Got image name: 0000000000.dkr.ecr.us-east-1.amazonaws.com/test:1"
watchtower_1 | time="2019-12-25T22:49:35Z" level=debug msg="Error pulling image 0000000000.dkr.ecr.us-east-1.amazonaws.com/sump-pump-v2:1, Error response from daemon: Get https://0000000000.dkr.ecr.us-east-1.amazonaws.com/v2/test/manifests/1: no basic auth credentials"
watchtower_1 | time="2019-12-25T22:49:35Z" level=info msg="Unable to update container /root_test_1. Proceeding to next."
watchtower_1 | time="2019-12-25T22:49:35Z" level=debug msg="Error response from daemon: Get https://0000000000.dkr.ecr.us-east-1.amazonaws.com/v2/test/manifests/1: no basic auth credentials"
Распаковывая значение auth, у него просто имя хоста. Нет учетных данных репозитория.
Я пытался следовать документации " Помощники по учетным данным", но не уверен, что понимаю, к чему относится вышеупомянутый файл Dockerfile.
Приветствуются любые указатели в правильном направлении. Спасибо!
1 ответ
Попробуйте следующее:
Создайте том докера с именем helper
docker volume create helper
Создайте образ из файла Dockerfile в документации
docker build -t aws-ecr-dock-cred-helper .
- Запускаем контейнер
docker run -d --rm --name aws-cred-helper --volume helper:/go/bin aws-ecr-dock-cred-helper
Контейнер запустится и смонтируется helper
объем в /go/bin
где docker-credential-ecr-login, а затем остановитесь. Вы можете проверить содержаниеhelper
объем с
docker run --rm --it -v helper:/go/bin alpine
тогда делай
ls /go/bin
вы должны увидеть docker-credential-ecr-login
двоичный. Я не использовал docker compose, но вам нужно смонтироватьhelper
объем в контейнер сторожевой башни на /go/bin
и по какой-то причине экспортируйте ваш $PATH с помощью /go/bin
как в документах:
environment:
- HOME=/
- PATH=$PATH:/go/bin