Вход в Docker для всей системы?

Вход в Docker для всей системы?

Есть ли способ зарегистрировать всю машину/демон Docker в реестре?

Все, что я вижу о Docker Login и различных проприетарных помощниках по учетным данным, использует ~/.docker/config.json, т. е. относится к каждому пользователю.

У меня возникла ситуация, когда мне нужно извлечь образы из частного реестра; несколько человек имеют произвольный доступ sudo на этих машинах и должны иметь возможность использовать Docker для нашего реестра.

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

Я мог бы предоставить один файл, на который каждый мог бы ссылаться config.json, но я бы предпочел, чтобы это происходило с момента первого входа в систему на каждой машине.

решение1

На ум приходят три варианта:

  1. Не делайте образ приватным, а вместо этого разрешите любому, кто может получить доступ к серверу реестра, извлечь образ. Это довольно распространено в средах, поскольку образ должен содержать только библиотеки и двоичные файлы для запуска приложения, а не файлы конфигурации, секреты или данные, которые будут внедрены во время выполнения или сохранены в томе.

  2. Если у всех есть доступ к sudo, запустите команды docker из sudo, включая логин. Учетные данные будут сохранены под пользователем root~/.docker/config.json

  3. Создайте свой собственный помощник по учетным данным, который просто выводит логин на хост. Интерфейс помощника по учетным данным довольно прост, 4 операции (хранить, получать, перечислять, стирать), которые можно реализовать в скрипте оболочки. А для логинов вам, вероятно, понадобится только операция get.

Этот вспомогательный скрипт учетных данных может выглядеть так: docker-credential-your-helper(где your-helperможет быть выбрано любое имя):

#!/bin/sh

your_registry='
{ "ServerURL": "your-registry",
  "Username": "your-user",
  "Secret": "your-pass"
}
'

if [ "$1" = "get" ]; then
  read hostname
  case "$hostname" in
    your-registry)
      echo "${your_registry}"
      exit 0
      ;;
  esac
elif [ "$1" = "list" ]; then
  echo "your-registry"
fi
# everything else is unhandled
exit 1

Сделайте этот файл исполняемым и поместите его в путь. Тогда у каждого пользователя ~/.docker/config.jsonбудет запись помощника учетных данных (обратите внимание, что docker-credential-она не включена в этот файл, только часть имени файла после нее):

{
  "credHelpers": {
    "your-host": "your-helper"
  }
}

Связанный контент