Системный вход в Docker?

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

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

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

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

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

0
задан 27 July 2021 в 00:10
1 ответ

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

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

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

  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

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

{
  "credHelpers": {
    "your-host": "your-helper"
  }
}
3
ответ дан 31 July 2021 в 13:32

Теги

Похожие вопросы