Carl Levasseur
Carl Levasseur

Reputation: 4661

Docker: How to access to a private github repo using ssh?

I'm trying to clone a private repo from github using Docker. The problem is that I need to use ssh to access to that repo. I added a key in my github project's setting which is used, I suppose, to identify the docker's server.

My problem is that I can't figure out what I should write in my Dockerfile so that the server use that key when it tries to access to my github repo. I saw examples where id_rsa is added to the container, but I don't know where id_rsa is stored on their server, if it exists

RUN mkdir /root/.ssh/
# can't find the file id_rsa
ADD id_rsa /root/.ssh/id_rsa 
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

run git clone [email protected]:user/repo.git

How do I access to my private repo from docker's server ?

Upvotes: 5

Views: 9977

Answers (2)

Abel Muiño
Abel Muiño

Reputation: 7761

If you want to use git from the Dockerfile, you need to configure the container in the same way as you would configure your own development machine.

I can't really understand which is "their" in "their server", so I'm just guessing.

When you registered a public key with github, you should have got the private key too. That's the id_rsa that you see in other examples.

If you can not locate that file, just start over. Delete the old key, generate a new one and configure it on github and on your docker build context (in your example, just copy it in the same folder as the Dockerfile).

As a different strategy, you might want to do the checkout outside of the image build process (clone locally and ADD everything to the image).

Upvotes: 5

Marcus Hughes
Marcus Hughes

Reputation: 5493

I managed to do this by using ssh-add on the key.

A "problem" with using multiple RUN instructions is that non-persistent data won't be available at the next RUN. I managed to log in and use github private repos with

RUN eval `ssh-agent -s` && \
    ssh-add id_rsa && \
    git clone [email protected]:user/repo.git

By using the &&'s on a single CMD, the eval process will still be running and ssh-agent has the key loaded when you connect to github.

I hope this helps.

Upvotes: 10

Related Questions