2017-09-15 1 views
4

Je veux donc inclure une clé RSA dans mon image pour pouvoir cloner un repo git dans mon image lors de sa construction. Mais je ne veux vraiment pas avoir à garder cette clé dans le dépôt de docker. Quelqu'un at-il une bonne recommandation sur la façon de gérer cela? De la documentation docker et de divers autres threads, il semble qu'il n'y ait aucun moyen de COPY des fichiers de l'extérieur du contexte de construction. Outre les solutions suivantes que je ne suis pas intéressé à utiliser:Docker: ajout de clés rsa à l'image en dehors du contexte de construction

How to include files outside of Docker's build context?

est-il une meilleure solution à cela? Ou est-ce que je vais devoir soit garder la clé dans le rapport de construction ou construire à partir de l'emplacement de la clé RSA que je veux utiliser? Je suppose qu'une manière possible de le faire serait de gitignore la clé du repo de construction et juste le mettre dedans chaque fois que je le clone, et en fais une note dans le readme ainsi que d'autres réalisateurs savent faire ceci aussi.

--- Ma solution ---

Je ne pense pas qu'il y ait une réponse « correcte » pour cela, mais ici était la solution que je suis allé avec. Je crée un utilisateur Linux (quelque part) et génère une clé pour cela. Créez ensuite un utilisateur sur gitlab avec uniquement des droits de clonage repo. J'ajoute la clé publique de l'utilisateur linux à l'utilisateur gitlab. Ensuite, pour la construction, je crée le dossier .ssh et copiez dans la clé privée des utilisateurs avec un fichier de configuration. Je stocke simplement les clés des utilisateurs dans le dépôt de docker.

étapes de construction:

RUN mkdir ~/.ssh 
RUN touch ~/.ssh/known_hosts 
RUN ssh-keyscan -t rsa gitlab_host > ~/.ssh/known_hosts 
COPY ./ssh/config /root/.ssh 
COPY ./ssh/id_rsa_app /root/.ssh 
RUN chmod 600 /root/.ssh/id_rsa_app 

fichier de configuration ssh:

Host gitlab-app 
    HostName gitlab_host 
    IdentityFile /root/.ssh/id_rsa_app 
    IdentitiesOnly yes 

Maintenant, le clone git fonctionne à l'intérieur de la construction.

Répondre

3

Qu'en est-il de l'utilisation d'un build argument? Faites quelque chose comme ceci dans votre Dockerfile:

ARG rsakey 
RUN test -n "${rsakey}" && { \ 
     mkdir -p -m 700 /root/.ssh; \ 
     echo "${rsakey}" > /root/.ssh/id_rsa; \ 
     chmod 600 /root/.ssh/id_rsa; \ 
    } || : 

Ensuite, lorsque vous créez l'image, utilisez l'option --build-arg:

docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" . 

Cela va injecter la clé dans l'image au moment de la construction sans exiger à vivez dans votre contexte de construction.

+0

merci, ce serait une solution réalisable. mais nous avons décidé de créer un utilisateur linux appelé 'app', créé une clé pour cela et ensuite créé un utilisateur 'app' sur notre gitlab avec seulement les droits de cloner repos. Nous avons ensuite mis cette clé dans nos dépôts docker avec un fichier de configuration. voir au dessus. – ThriceGood