Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

4.3K
Vistas
Cómo clonar un repositorio Git desde un contenedor Docker

Tenemos una herramienta que necesita clonar varios repositorios de Git para agregar datos de documentación. Queremos poner esa herramienta en un contenedor Docker para ejecutarla fácilmente localmente y con Jenkins, y permitir la reproducibilidad.

Los repositorios de Git están alojados en un servidor privado que requiere autenticación con claves SSH. Por lo tanto, el contenedor Docker debe obtener acceso de alguna manera a las claves SSH del usuario que ejecuta el contenedor.

Tenemos una lista de restricciones:

  1. no queremos incrustar claves SSH en la imagen de Docker
  2. no queremos que los usuarios creen la imagen de Docker. Consideramos que un Dockerfile no permite la reproducibilidad, mientras que una imagen de Docker ya generada sí.
  3. no queremos que el contenedor se ejecute como usuario root
  4. queremos usar las claves SSH del usuario host que ejecuta el contenedor
  5. Se pueden proporcionar parámetros al comando que inicia el contenedor ( -v , -u , …)

Pregunta: ¿Cómo podemos lograr esto, si es posible?

Relacionada:

  • Usar claves SSH dentro del contenedor docker (las claves SSH se pasan en el momento de la compilación; queremos el tiempo de ejecución)
  • Clonar repositorio privado de git con dockerfile (mismo problema)
  • Inyecte las claves SSH del host en Docker Machine con Docker Compose (ejecutándose como root )
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puedes usar algo como:

 echo "git-user:x:$(id -u):$(id -g):Git User:/tmp:/bin/bash" > /tmp/fake_passwd # See below why to use this docker run \ -u $(id -u):$(id -g) \ -w /tmp \ -v $HOME/.ssh:/path/to/.ssh \ -v /tmp/fake_passwd:/etc/passwd \ --entrypoint sh \ -it \ alpine/git # commands in the container: $ export GIT_SSH_COMMAND='ssh -i /path/to/.ssh/id_rsa -o "StrictHostKeyChecking=no"' $ git clone [path to git repo]

Esto asegurará que el contenedor se ejecute con el mismo UID/GID que el usuario del host, pudiendo así leer las claves sin cambiar sus permisos o usar derechos de root. En detalles:

  • -u $(id -u):$(id -g) establece el usuario del contenedor para que coincida con el usuario del host
  • -w /tmp nos aseguramos de trabajar en un directorio en el que podamos escribir (también podemos montar un volumen en el que tengamos permisos de lectura/escritura o construir la imagen con dicho directorio)
  • -v $HOME/.ssh:/path/to/.ssh monta la clave SSH del usuario local desde el host
  • --entrypoint sh y -it son específicos de alpine/git para tener una sesión de shell interactiva, es posible que no la necesite con su imagen

¿Por qué montar un /etc/passwd falso?

Cuando ejecuta un contenedor basado en Linux (como alpine o debian ) con un UID/GID desconocido (uno que no está presente en /etc/passwd ), el comando git clone puede generar un error con un mensaje como:

 Cloning into 'myrepo'... No user exists for uid 1000 fatal: Could not read from remote repository.

Al montar este archivo passwd "falso", nos aseguramos de que el sistema operativo reconozca al usuario que ejecuta el contenedor y permita que funcione nuestro comando git clone. Nuestro archivo de contraseña se verá así:

 git-user:x:1000:1000:Git User:/tmp:/bin/bash

Lo que significa aproximadamente:

  • git-user existe con UID 1000 y GID 1000
  • su directorio HOME es /tmp (es opcional pero este directorio es escribible y evita alguna advertencia de git clone )

Al configurar /tmp (u otro directorio que se pueda crear durante la creación de la imagen), nos aseguramos de tener un directorio HOME grabable para git-user que evitará una advertencia de git clone diciendo que no se pudo crear un directorio .ssh

Sin embargo, esto puede tener otros efectos secundarios si tiene la intención de ejecutar diferentes tareas con su contenedor.

¿Por qué usar GIT_SSH_COMMAND ?

GIT_SSH_COMMAND='ssh -i /path/to/.ssh/id_rsa' asegurará que git clone esté usando nuestra clave, pero esto también se puede hacer usando ssh-agent - consultehttps://serverfault.com/questions/447028/ no interactivo-git-clone-ssh-fingerprint-prompt

En el ejemplo, uso -o "StrictHostKeyChecking=no" pero puede ser inseguro , otra solución sería montar un archivo de host conocido en el contenedor con la clave de host del servidor git repo y usar -o "UserKnownHostsFile=/path/to/KnownHostFile"

over 4 years ago · Santiago Trujillo Denunciar

0

¿Estaría bien clonar los repositorios en la máquina host y montar los directorios en la imagen de la ventana acoplable?

p.ej :

 git clone github:repo1 git clone github:repo2 ... docker run -v repo1:/path/to/repo1 -v repo2:/path/to/repo2 ...
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda