¿Inicio de sesión en Docker en todo el sistema?

¿Inicio de sesión en Docker en todo el sistema?

¿Hay alguna forma de registrar una máquina completa/demonio Docker en un registro?

Todo lo que veo sobre el inicio de sesión en Docker y varios usos auxiliares de credenciales patentadas ~/.docker/config.json, es decir, es por usuario.

Tengo una situación en la que me gustaría extraer imágenes de un registro privado; varias personas tienen acceso sudo arbitrario en esas máquinas y deberían poder usar Docker en nuestro registro.

Dado que el acceso a Docker debe leerse como acceso raíz a una máquina de todos modos (es decir, las credenciales de usuario no son mutuamente seguras si pueden ejecutar Docker), y el acceso a sudo es el mismo pero directamente, me gustaría ir al grano y registrar toda la máquina. sin que cada usuario tenga que pasar por obstáculos.

Podría proporcionar un archivo que todos pudieran vincular a su archivo config.json, pero preferiría que se ocupara de ello desde el primer inicio de sesión en cada máquina.

Respuesta1

Me vienen a la mente tres opciones:

  1. No haga que la imagen sea privada y, en su lugar, permita que cualquiera pueda extraer la imagen y pueda acceder al servidor de registro. Esto es bastante común en entornos, ya que la imagen solo debe contener las bibliotecas y los archivos binarios para ejecutar la aplicación, no archivos de configuración, secretos o datos que se inyectarían en tiempo de ejecución o se almacenarían en un volumen.

  2. Si todos tienen acceso a sudo, ejecute los comandos de la ventana acoplable desde sudo, incluido el inicio de sesión. Las credenciales se almacenarán en la cuenta del usuario root.~/.docker/config.json

  3. Cree su propio asistente de credenciales que simplemente envíe el inicio de sesión al host. La interfaz de ayuda de credenciales es bastante simple, 4 operaciones (almacenar, obtener, enumerar, borrar) que podrían implementarse en un script de shell. Y para iniciar sesión, probablemente solo necesite la operación get.

Ese script auxiliar de credenciales podría verse como un script llamado docker-credential-your-helper(donde your-helperpuede haber un nombre de su elección):

#!/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

Haga que ese archivo sea ejecutable y colóquelo en la ruta. Luego, cada usuario ~/.docker/config.jsontendría una entrada auxiliar de credencial (tenga en cuenta que docker-credential-no se incluye en este archivo, solo la parte del nombre del archivo que sigue a eso):

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

información relacionada