
¿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:
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.
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
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-helper
puede 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.json
tendrí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"
}
}