
Existe alguma maneira de registrar uma máquina inteira/daemon do Docker em um registro?
Tudo o que vejo sobre o login do docker e vários auxiliares de credenciais proprietários usa ~/.docker/config.json
, ou seja, é por usuário.
Tenho uma situação em que gostaria de extrair imagens de um registro privado; várias pessoas têm acesso sudo arbitrário nessas máquinas e devem poder usar o Docker em nosso registro.
Como o acesso ao Docker deve ser lido como acesso root a uma máquina de qualquer maneira (ou seja, as credenciais do usuário não são mutuamente seguras se puderem executar o Docker), e o acesso ao sudo é o mesmo, mas diretamente, eu gostaria de ir direto ao ponto e registrar toda a máquina sem que cada usuário tenha que passar por obstáculos.
Eu poderia fornecer um arquivo que todos pudessem vincular aos seus config.json
, mas preferiria que isso fosse resolvido desde o primeiro login em cada máquina.
Responder1
Três opções vêm à mente:
Não torne a imagem privada e, em vez disso, permita que qualquer pessoa extraia a imagem que possa acessar o servidor de registro. Isso é bastante comum em ambientes, pois a imagem deve conter apenas as bibliotecas e binários para executar o aplicativo, e não arquivos de configuração, segredos ou dados, que seriam injetados em tempo de execução ou armazenados em um volume.
Se todos tiverem acesso ao sudo, execute os comandos do docker a partir do sudo, incluindo o login. As credenciais serão armazenadas no usuário root
~/.docker/config.json
Faça seu próprio auxiliar de credencial que apenas envia o login para o host. A interface auxiliar de credenciais é bastante simples, 4 operações (armazenar, obter, listar, apagar) que podem ser implementadas em um script de shell. E para logins, você provavelmente só precisará da operação get.
Esse script auxiliar de credencial pode se parecer com um script chamado docker-credential-your-helper
(onde your-helper
pode ser um nome de sua escolha):
#!/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
Torne esse arquivo executável e coloque-o no caminho. Então, cada usuário ~/.docker/config.json
teria uma entrada auxiliar de credencial (observe que docker-credential-
não está incluída neste arquivo, apenas a parte do nome do arquivo depois disso):
{
"credHelpers": {
"your-host": "your-helper"
}
}