Общесистемный вход в Docker?
Есть ли способ зарегистрировать всю машину/демон Docker в реестре?
Все, что я вижу о входе в Docker и различных помощниках по учетным данным, использует~/.docker/config.json
, т. е. для каждого пользователя.
У меня возникла ситуация, когда я хотел бы получить изображения из частного реестра; несколько человек имеют как произвольный доступ sudo на этих машинах, так и должны иметь возможность использовать Docker для нашего реестра.
Поскольку доступ к Docker в любом случае должен восприниматься как root-доступ к машине (т. е. учетные данные пользователя не являются взаимно безопасными, если они могут запускать Docker), а доступ к sudo такой же, но прямой, я бы хотел просто перейти к делу и зарегистрировать всю машину. без необходимости каждому пользователю преодолевать трудности.
Я мог бы предоставить один файл, на который каждый мог бы дать ссылку на свойconfig.json
, но я бы предпочел, чтобы об этом позаботились при первом входе в систему на каждой машине.
1 ответ
На ум приходят три варианта:
Не делайте образ частным, а вместо этого позвольте любому пользователю получить доступ к образу, имеющему доступ к серверу реестра. Это довольно распространено в средах, поскольку образ должен содержать только библиотеки и двоичные файлы для запуска приложения, а не файлы конфигурации, секреты или данные, которые будут внедрены во время выполнения или сохранены в томе.
Если у всех есть доступ к sudo, запустите команды docker из sudo, включая вход в систему. Учетные данные будут храниться под учетными данными пользователя root.
Создайте свой собственный помощник по учетным данным, который просто выводит логин на хост. Интерфейс помощника по учетным данным довольно прост: 4 операции (сохранение, получение, список, стирание), которые можно реализовать в сценарии оболочки. А для входа в систему вам, вероятно, понадобится только операция get.
Этот вспомогательный сценарий учетных данных может выглядеть как сценарий под названием
#!/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
Сделайте этот файл исполняемым и поместите его в путь. Тогда каждый пользователь
{
"credHelpers": {
"your-host": "your-helper"
}
}