with - run git clone dockerfile



Clone private git repo com dockerfile (4)

Minha chave foi protegida por senha que estava causando o problema, um arquivo de trabalho agora está listado abaixo (para ajuda 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
# Warning! Anyone who gets their hands on this image will be able
# to retrieve this private key file from the corresponding image layer
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

https://code.i-harness.com

Eu copiei este código do que parece ser vários dockerfiles de trabalho, aqui está o meu:

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

Isso me dá o erro

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 é a primeira vez que uso dockerfiles, mas pelo que li (e tirado de configurações de trabalho) não consigo ver por que isso não funciona.

Meu id_rsa está na mesma pasta que o meu dockerfile e é uma cópia da minha chave local que pode clonar este repo sem nenhum problema.

Editar:

No meu dockerfile, posso adicionar:

RUN cat /root/.ssh/id_rsa

E imprime a chave correta, então sei que ela está sendo copiada corretamente.

Eu também tentei fazer como noé aconselhou e corri:

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

Isso infelizmente também não funciona.


Não há necessidade de mexer nas configurações do ssh. Use um arquivo de configuração (não um Dockerfile) que contenha variáveis ​​de ambiente e faça com que um script de shell atualize seu arquivo docker em tempo de execução. Você mantém os tokens dos seus Dockerfiles e pode clonar por https (não é necessário gerar ou passar chaves ssh).

Vá para Configurações> Tokens de Acesso Pessoal

  • Gere um token de acesso pessoal com o escopo do repo ativado.
  • Clone assim: git clone https://[email protected]/user-or-org/repo

Alguns comentadores notaram que, se você usar um Dockerfile compartilhado, isso poderia expor sua chave de acesso a outras pessoas em seu projeto. Embora isso possa ou não ser uma preocupação para seu caso de uso específico, aqui estão algumas maneiras de lidar com isso:

  • Use um script de shell para aceitar argumentos que possam conter sua chave como uma variável. Substitua uma variável no seu Dockerfile por sed ou similar, ou seja, chamando o script com sh rundocker.sh MYTOKEN=foo que substituiria em https://{{MY_TOKEN}}@github.com/user-or-org/repo . Observe que você também pode usar um arquivo de configuração (em .yml ou qualquer formato que desejar) para fazer a mesma coisa, mas com variáveis ​​de ambiente.
  • Crie um usuário github (e gere um token de acesso para) somente para esse projeto

Para o repositório bitbucket, gere App Password (configurações Bitbucket -> Access Management -> App Password, veja a imagem) com acesso de leitura ao repo e ao projeto.

Então o comando que você deve usar é:

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

Você deve criar um novo conjunto de chaves SSH para essa imagem do Docker, pois provavelmente não deseja incorporar sua própria chave privada. Para que isso funcione, você terá que adicionar essa chave às chaves de implantação em seu repositório git. Aqui está a receita completa:

  1. Gere chaves ssh com o ssh-keygen -q -t rsa -N '' -f repo-key que lhe dará os arquivos repo-key e repo-key.pub.

  2. Adicione repo-key.pub às suas chaves de implantação do repositório.
    No GitHub, vá para [seu repositório] -> Configurações -> Implementar chaves

  3. Adicione algo assim ao seu 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...
    

Note que acima desativa StrictHostKeyChecking, então você não precisa de .ssh / known_hosts. Embora eu provavelmente goste mais da solução com ssh-keyscan em uma das respostas acima.





docker