Clone il repo privato di git con il dockerfile

Ho copiato questo codice da quello che sembra essere vari file di lavoro in giro, ecco il mio:

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 

Questo mi dà l'errore

 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 

Questa è la prima volta che utilizzo i file dockerfiles, ma da quello che ho letto (e preso dai configs funzionanti) non riesco a capire perché questo non funziona.

Il mio id_rsa è nella stessa cartella del file dockerfile ed è una copia della mia chiave locale che può clonare questo repo nessun problema.

Edit:

    Nel mio dockerfile posso aggiungere:

     RUN cat /root/.ssh/id_rsa 

    E printing la chiave corretta, quindi so che sia correttamente copiata.

    Ho anche cercato di fare come noah consigliato e corse:

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

    Anche questo non funziona tristemente.

    La chiave era protetta da password che stava causando il problema, un file di lavoro è ora elencato di seguito (per l'aiuto dei futuri googler)

     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 

    È necessario creare un nuovo set di chiavi SSH per l'image Docker, in quanto probabilmente non si desidera incorporare la propria chiave privata. Per farlo funzionare, dovrai aggiungere quella chiave alle chiavi di distribuzione nel tuo repository git. Ecco la ricetta completa:

    1. Generare chiavi ssh con ssh-keygen -q -t rsa -N '' -f repo-key -rn ssh-keygen -q -t rsa -N '' -f repo-key che vi darà file repo-key e repo -key.pub.

    2. Aggiungere repo-key.pub ai tasti di distribuzione del repository.
      Su GitHub, vai a [il tuo repository] -> Settings -> Distribuisci i tasti

    3. Aggiungere qualcosa del genere al tuo Dockerfile:

       ADD repo-key /
       CORRERE \
         chmod 600 / repo-key && \  
         echo "IdentityFile / repo-key" >> / etc / ssh / ssh_config && \  
         echo -e "StrictHostKeyChecking no" >> / etc / ssh / ssh_config && \  
         // qui i comandi del clone di git ...
      

    Si noti che sopra si distriggers StrictHostKeyChecking, quindi non è necessario .ssh / known_hosts. Anche se probabilmente mi piace più la soluzione con ssh-keycan in una delle risposte sopra.

    Non c'è bisogno di aggirare le configurazioni di ssh. Utilizzare un file di configuration (non un Dockerfile) che contiene variables di ambiente e disporre di uno script di shell per aggiornare il file docker in fase di runtime. Teni i token dai Dockerfiles e puoi clonare su https (non è necessario generare o passare le chiavi ssh).

    Vai a Impostazioni> Token di accesso personale

    • Genera un token di accesso personale con abilitazione repo abilitata.
    • Clone come questo: git clone https://[email protected]/user-or-org/repo

    Alcuni commentatori hanno notato che se si utilizza un Dockerfile condiviso, ciò potrebbe esporre la chiave di accesso a altre persone del progetto. Anche se questo può o non può essere una preoccupazione per il tuo caso di utilizzo specifico, ecco alcuni modi in cui puoi farlo:

    • Utilizza uno script di shell per accettare argomenti che potrebbero contenere la chiave come variabile. Sostituite una variabile nel tuo Dockerfile con sed o simili, vale a dire chiamando lo script con sh rundocker.sh MYTOKEN=foo che sostituirebbe su https://{{MY_TOKEN}}@github.com/user-or-org/repo . Si noti che è anche ansible utilizzare un file di configuration (in .yml o qualsiasi formato desiderato) per eseguire la stessa cosa ma con le variables di ambiente.
    • Crea un utente github (e genera un token di accesso per) solo per quel progetto

    Per il repository bitbucket, generare password App (Gestione accessi -> Password app) con accesso in lettura al repo e al progetto. Quindi il command da utilizzare è:

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