Docker Swarm - не удается извлечь из частного реестра

Я запускаю службу в кластере Swarm благодаря docker stack deploy --with-registry-auth и этому файлу compose:

version: "3.1"
services:
  builder-consumer:
    image: us.gcr.io/my-gcloud-project/my/image:123
    stop_grace_period: 30m
    volumes:
      - [...]
    environment:
      - [...]
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == worker
    secrets:
      - [...]
secrets:
  [...]

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

level = error msg = "Не продолжать извлечение после ошибки: denied: Permission denied for \ 123 \" from request \ "/ v2 / my-gcloud-project / my / image / manifest / 123 \". "

level = info msg = "Перевод \" запрещен: доступ запрещен для \\ "123 \\" из запроса \\ "/ v2 / my-gcloud-project / my / image / manifest / 123 \\". \ "в \" репозиторий us.gcr.io/my-gcloud-project/my/image not found: не существует или нет доступа по запросу \ ""

level = error msg = "ошибка получения изображения" error = "репозиторий us.gcr.io/my-gcloud-project/my/image не найден: не существует или отсутствует доступ по запросу" module = "узел / агент / диспетчер задач" узел .id = ... service.id = ... task.id = ...

level = error msg = "фатальная ошибка задачи" error = "Нет такого изображения: us.gcr.io/my-gcloud-project/my/image:123@sha256: ..." module = "node / agent / taskmanager" node.id = ... service.id = ... task.id = ...

Однако когда я вручную запускаю docker pull на этом компьютере, он работает нормально, поскольку каждый компьютер в кластере аутентифицируется в моем частном реестре Google благодаря docker login.

Таким образом, мои вопросы:

  • Почему добавленный работник не может извлечь данные из частного реестра?
  • Что именно делает --with-registry-auth?

Большое спасибо

Примечание: узлы работают под управлением Ubuntu 16.04.2 LTS, а версия Docker:

Server:
 Version:      17.04.0-ce
 API version:  1.28 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:07:42 2017
 OS/Arch:      linux/amd64
 Experimental: false

person BOUGA    schedule 16.05.2017    source источник
comment
Похоже, вы столкнулись с проблемой режима роя. Вы проверяли их проблемы на GitHub и / или поднимали собственную проблему?   -  person BMitch    schedule 06.09.2017
comment
@bouga - ты как-то решил это? У меня такая же проблема, и я ищу решение.   -  person Izydorr    schedule 06.02.2019
comment
@Izydorr Нет, мы просто отошли от роя и вместо этого использовали Kubernetes   -  person BOUGA    schedule 08.02.2019


Ответы (1)


В моем случае я не запускал стек с помощью «--with-registry-auth», поэтому я отключил экземпляры и снова запустил диспетчер с этой опцией, и теперь он работает.

person Cris R    schedule 18.05.2017
comment
Как я уже сказал, я также развертываю с --with-registry-auth, и сначала он работает, но когда я добавляю виртуальную машину в рой (присоединяясь в качестве рабочего), она не может получить образы служб из-за отказа в разрешении. - person BOUGA; 01.06.2017
comment
как насчет TTL для CI_JOB_TOKEN? - person Richard; 03.04.2018