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
Другие вопросы по тегам