yml tag hub example compose git bitbucket docker

tag - Clon privado git repo con dockerfile



docker push tag to registry (5)

He copiado este código de lo que parecen ser varios archivos docker en funcionamiento, aquí está el mío:

FROM ubuntu MAINTAINER Luke Crooks "[email protected]" # Update aptitude with new repo RUN apt-get update # Install software RUN apt-get install -y git python-virtualenv # Make ssh dir RUN mkdir /root/.ssh/ # Copy over private key, and set permissions ADD id_rsa /root/.ssh/id_rsa RUN chmod 700 /root/.ssh/id_rsa RUN chown -R root:root /root/.ssh # Create known_hosts RUN touch /root/.ssh/known_hosts # Remove host checking RUN echo "Host bitbucket.org/n/tStrictHostKeyChecking no/n" >> /root/.ssh/config # Clone the conf files into the docker container RUN git clone [email protected]:Pumalo/docker-conf.git /home/docker-conf

Esto me da el error

Step 10 : RUN git clone [email protected]:Pumalo/docker-conf.git /home/docker-conf ---> Running in 0d244d812a54 Cloning into ''/home/docker-conf''... Warning: Permanently added ''bitbucket.org,131.103.20.167'' (RSA) to the list of known hosts. Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 2014/04/30 16:07:28 The command [/bin/sh -c git clone [email protected]:Pumalo/docker-conf.git /home/docker-conf] returned a non-zero code: 128

Esta es la primera vez que uso archivos docker, pero por lo que he leído (y tomado de las configuraciones de trabajo) no puedo ver por qué esto no funciona.

Mi id_rsa está en la misma carpeta que mi archivo docker y es una copia de mi clave local que puede clonar este repositorio sin problemas.

Editar:

En mi dockerfile puedo agregar:

RUN cat /root/.ssh/id_rsa

E imprime la clave correcta, así que sé que se está copiando correctamente.

También he tratado de hacer lo que Noah aconsejó y corrí:

RUN echo "Host bitbucket.org/n/tIdentityFile /root/.ssh/id_rsa/n/tStrictHostKeyChecking no" >> /etc/ssh/ssh_config

Lamentablemente esto tampoco funciona.


Debe crear un nuevo conjunto de claves SSH para esa imagen de Docker, ya que probablemente no desee incrustar allí su propia clave privada. Para que funcione, deberá agregar esa clave a las claves de implementación en su repositorio git. Aquí está la receta completa:

  1. Genere claves ssh con ssh-keygen -q -t rsa -N '''' -f repo-key que le dará los archivos repo-key y repo-key.pub.

  2. Agregue repo-key.pub a sus claves de implementación del repositorio.
    En GitHub, vaya a [su repositorio] -> Configuración -> Implementar claves

  3. Agrega algo como esto a tu Dockerfile:

    ADD repo-key / RUN / chmod 600 /repo-key && / echo "IdentityFile /repo-key" >> /etc/ssh/ssh_config && / echo -e "StrictHostKeyChecking no" >> /etc/ssh/ssh_config && / // your git clone commands here...

Tenga en cuenta que lo anterior desactiva StrictHostKeyChecking, por lo que no necesita .ssh / known_hosts. Aunque probablemente me guste más la solución con ssh-keyscan en una de las respuestas anteriores.


Mi clave estaba protegida con una contraseña que estaba causando el problema, un archivo de trabajo ahora se lista a continuación (para ayuda de futuros googlers)

FROM ubuntu MAINTAINER Luke Crooks "[email protected]" # Update aptitude with new repo RUN apt-get update # Install software RUN apt-get install -y git # Make ssh dir RUN mkdir /root/.ssh/ # Copy over private key, and set permissions ADD id_rsa /root/.ssh/id_rsa # Create known_hosts RUN touch /root/.ssh/known_hosts # Add bitbuckets key RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts # Clone the conf files into the docker container RUN git clone [email protected]:User/repo.git


No hay necesidad de jugar con configuraciones ssh. Utilice un archivo de configuración (no un archivo Docker) que contenga variables de entorno, y haga que un script de shell actualice su archivo de ventana acoplable en tiempo de ejecución. Mantiene los tokens fuera de sus Dockerfiles y puede clonar sobre https (no es necesario generar ni pasar claves ssh).

Vaya a Configuración> Tokens de acceso personal

  • Generar un token de acceso personal con alcance de repo habilitado.
  • Clone así: git clone https://[email protected]/user-or-org/repo

Algunos comentadores han notado que si usa un Dockerfile compartido, esto podría exponer su clave de acceso a otras personas en su proyecto. Si bien esto puede o no ser una preocupación para su caso de uso específico, aquí hay algunas formas en que puede lidiar con eso:

  • Use un script de shell para aceptar argumentos que podrían contener su clave como una variable. Reemplace una variable en su Dockerfile con sed o similar, es decir, llame al script con sh rundocker.sh MYTOKEN=foo que reemplazaría en https://{{MY_TOKEN}}@github.com/user-or-org/repo . Tenga en cuenta que también podría usar un archivo de configuración (en .yml o el formato que desee) para hacer lo mismo pero con variables de entorno.
  • Cree un usuario github (y genere un token de acceso para) solo para ese proyecto

Otra opción es utilizar una construcción de ventana acoplable de varias etapas para asegurarse de que sus claves SSH no estén incluidas en la imagen final.

Como se describe en mi post , puede preparar su imagen intermedia con las dependencias necesarias para git clonar y luego COPY los archivos requeridos en su imagen final.

Además, si LABEL nuestras capas intermedias, incluso podemos eliminarlas de la máquina cuando hayamos terminado.

# Choose and name our temporary image. FROM alpine as intermediate # Add metadata identifying these images as our build containers (this will be useful later!) LABEL stage=intermediate # Take an SSH key as a build argument. ARG SSH_PRIVATE_KEY # Install dependencies required to git clone. RUN apk update && / apk add --update git && / apk add --update openssh # 1. Create the SSH directory. # 2. Populate the private key file. # 3. Set the required permissions. # 4. Add github to our list of known hosts for ssh. RUN mkdir -p /root/.ssh/ && / echo "$SSH_KEY" > /root/.ssh/id_rsa && / chmod -R 600 /root/.ssh/ && / ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts # Clone a repository (my website in this case) RUN git clone [email protected]:janakerman/janakerman.git # Choose the base image for our final image FROM alpine # Copy across the files from our `intermediate` container RUN mkdir files COPY --from=intermediate /janakerman/README.md /files/README.md

Entonces podemos construir:

MY_KEY=$(cat ~/.ssh/id_rsa) docker build --build-arg SSH_KEY="$MY_KEY" --tag clone-example .

Demuestra que nuestras claves SSH se han ido:

docker run -ti --rm clone-example cat /root/.ssh/id_rsa

Limpie las imágenes intermedias de la máquina de construcción:

docker rmi -f $(docker images -q --filter label=stage=intermediate)


Para el repositorio de bitbucket, genere la contraseña de la aplicación (configuración de Bitbucket -> Administración de acceso -> Contraseña de la aplicación, vea la imagen) con acceso de lectura al repositorio y al proyecto.

Entonces el comando que debes usar es:

git clone https://username:[email protected]/reponame/projectname.git