2014-09-06 3 views
5

Ich versuche, ein Bild in Docker zu bauen, das einige geheime Dateien benötigt, um Dinge wie das Ziehen von einem privaten Git Repo zu tun. Ich habe eine Menge Leute mit Code wie folgt gesehen:Zugriff auf Secrets/Private Dateien, die zum Erstellen in Dockerfile benötigt werden?

ADD id_rsa /root/.ssh/id_rsa 
RUN chmod 700 /root/.ssh/id_rsa 
RUN touch /root/.ssh/known_hosts 
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts 
RUN git clone [email protected]:some/repo.git /usr/local/some_folder 

Obwohl das funktioniert, es bedeutet, dass ich mit meinem Bild meines privaten id_rsa speichern, die mich als schlechte Idee trifft. Was ich lieber tun würde, ist, meine geheimen Dateien in einem Cloud-Speicher wie s3 zu behalten und Anmeldeinformationen einfach als Umgebungsvariablen weiterzuleiten, um alles andere nach unten ziehen zu können.

Ich weiß, dass ich Umgebungsvariablen in docker run mit dem -e Schalter übergeben kann, aber wenn ich einige Dateien zur Build-Zeit brauche (wie die id_rsa einen Git-Klon ausführen), was kann ich tun? Im Idealfall könnte ich Umgebungsvariablen an docker build übergeben, aber das ist nicht möglich (ich kann nicht verstehen, warum).

Also, Ideen? Was ist die kanonische/korrekte Sache hier zu tun? Ich kann nicht die erste Person mit diesem Problem sein.

+0

möglich Duplikat von [Docker und Sichern von Passwörtern] (http://stackoverflow.com/questions/22651647/docker-and-securing-passwords) –

+0

Warum müssen Sie die Repos beim Erstellen des Containers klonen? Können Sie diese Dateien nicht schon lokal haben? Auf diese Weise werden Sie das Problem mit geheimen Dateien los und müssen Git auf dem Bild –

+0

@ AbelMuiño nicht installiert werden das Repo wird unabhängig von Docker aktualisiert werden, so auf jeden neuen Image-Build, wollen wir immer die neueste Version von das Repo.Wenn Sie ein Repo lokal klonen und diese Dateien separat im Bild haben, müssen Sie den Repo ständig aktualisieren und den Einsatz von Git zunichte machen. – Eli

Antwort

2

Ich werde mit dem einfachstenen Teil beginnen, was meiner Meinung nach einem verbreiteter Irrtum ist:

Im Idealfall würde ich in der Lage, Umgebungsvariablen passieren Build Andockfenster, aber das ist nicht möglich (ich kann nicht verstehen warum).

Ein Docker-Build soll reproduzierbar sein. Bei gleichem Kontext (Dateien im selben Verzeichnis wie Dockerfile) ist das resultierende Bild identisch. Sie sollen auch einfach sein. Beides zusammen erklärt das Fehlen von Umweltoptionen oder anderen Bedingungen.

Jetzt, da die Build reproduzierbar sein muss, die Ausführung jedes Befehls ist zwischengespeichert. Wenn Sie den Build zweimal ausführen, wird git pull nur das erste Mal ausgeführt.

Durch Ihren Kommentar, das ist nicht das, was Sie beabsichtigen:

so auf jedem neuen Bild zu bauen, wir wollen immer die neueste Version des Repo

Um einen neuen Build auslösen Sie brauchen um entweder den Kontext oder die Dockerfile zu ändern.

Der kanonische Weg (ich wahrscheinlich das Wort zu missbrauchen, aber das ist, wie die automated builds Arbeit) ist es, die Dockerfile in git aufzunehmen.

Dies ermöglicht einen einfachen Workflow von git pull ; docker build ... und vermeidet das Problem mit dem Speichern Ihrer Git-Anmeldeinformationen.

Verwandte Themen