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 git@github.com:user/repo.git

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

  • Git submodules best practice - always use ssh protocol over https?
  • Pulling Git from server
  • Git pull/push/clone doesn't work but SSH and git status/diff do work
  • Creating a bare repository on a Git server remotely
  • Repository access denied. access via a deployment key is read-only
  • SSH Authentication Failed when trying to clone a git repo in SourceTree
  • Adding SSH Keys to remote servers
  • Github prompting for credentials after ssh
  • 2 Solutions collect form web for “Docker: How to access to a private github repo using ssh?”

    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).

    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 git@github.com: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.

    Git Baby is a git and github fan, let's start git clone.