Login do Docker em todo o sistema?

Login do Docker em todo o sistema?

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:

  1. 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.

  2. 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

  3. 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-helperpode 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.jsonteria 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"
  }
}

informação relacionada