Git checkout private repository inside Docker

One of the aim of moving project’s deployment to docker, is to be able to build a image on any system without any manual setup. This articles shows how you can clone your private git repos inside a docker image without the need of username and password using SSH keys.

Generating the SSH key pairs

First we would generate a SSH key pair, which will be used by the docker image

$ mkdir ~/keys
$ ssh-keygen -t rsa -b 4096 -C ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tarunlalwani/.ssh/id_rsa): /home/tarunlalwani/keys/id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tarunlalwani/keys/id_rsa.
Your public key has been saved in /home/tarunlalwani/keys/

Now we have a keys folder generated in our home directotry with id_rsa and files.

Adding the target host fingerprints to known hosts

For security reason, each host that we would connect to using ssh, need to have finger prints in known_hosts file. When we connect to a server for the firts time, it asks us to save those finger print. To do that automatically we need to use the ssh-keyscan command

$ ssh-keyscan >> ~/keys/known_hosts
$ ssh-keyscan >> ~/keys/known_hosts

Adding the SSH keys on your git server

Make sure you add the content of the we generated earlier into the allowed SSH keys of your git server(github or gitlab or bitbucket) settings

Creating the Dockerfile

We will create a new docker-git folder in the home directory

$ mkdir ~/docker-git
$ mv ~/keys/ ~/docker-git/
$ cd ~/docker-git

Now let’s create a new Dockerfile inside the docker-git folder


FROM ubuntu:14.04
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update && apt-get -y install --no-install-recommends git ssh

RUN mkdir -p /root/.ssh
COPY keys .ssh

RUN git clone

CMD ["/bin/bash"]

Now if build and run the docker build command

$ docker build -t gittest:latest .

The output would come something like below

Step 8 : CMD /bin/bash
 ---> 93a05264fbca
Successfully built 93a05264fbca

To test same we can run the image using the tag

$ docker run -it gittest:latest
root@bf7ebb0619c0:~# ls
root@bf7ebb0619c0:~# cd seleniumplus/
root@bf7ebb0619c0:~/seleniumplus# ls