2014-09-25 22 views
27

Gibt es eine elegante Möglichkeit, ssl-Zertifikate zu Bildern hinzuzufügen, die von docker pull gekommen sind ?.docker container ssl certificates

Ich bin auf der Suche nach einer einfachen und reproduzierbaren Möglichkeit, eine Datei in/etc/ssl/certs hinzuzufügen und update-ca-certificates auszuführen. (Dies sollte Ubuntu- und Debian-Bilder abdecken).

Ich benutze Docker auf CoreOS, und der Coreos-Rechner vertraut die benötigten SSL-Zertifikate, aber die Docker-Container haben offensichtlich nur den Standard.

Ich habe versucht, docker run --entrypoint=/bin/bash zu verwenden, um dann das Zertifikat hinzuzufügen und update-ca-certificates auszuführen, aber das scheint den Einstiegspunkt dauerhaft zu überschreiben.

Ich frage mich auch, wäre es eleganter, nur /etc/ssl/certs auf dem Container von der Host-Maschine kopieren zu kopieren? Auf diese Weise würden die Container implizit denselben Eigenschaften wie der Host vertrauen.

ich bei der Arbeit mit einem ärgerlichen Proxy bin, der alles :(tritt zurück Welche SSL bricht und macht Behälter Art-von seltsamen, mit zu arbeiten

+1

Haben Sie darüber nachgedacht, eine Dockerfile zu erstellen, die Ihr Image verwendet, die Datei hinzufügt und update-ca-certificates ausführt? oder suchen Sie nicht danach? –

+0

Ich habe das für einige Bilder getan. Es ist keine schlechte Lösung. Erfordert jedoch, dass Sie alle Bilder mit Ihren eigenen erstellen. –

Antwort

34

Montieren Sie die certs auf den Docker Behälter-v mit:..

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates" 
+2

Das ist ziemlich raffiniert. Wenn der Container den gleichen Stil von ssl_certs verwendet, würden Sie nicht einmal die Zeile update-ca-certificts benötigen, der Host hätte es bereits getan :). –

10

Wie in einem comment above vorgeschlagen wurde, wenn der Zertifikatspeicher auf dem Host mit dem Gast kompatibel ist, können Sie es einfach direkt montieren.

O n einen Debian-Host (und einen Container), habe ich erfolgreich gemacht:

9

Ich versuche, etwas Ähnliches zu tun. Wie oben erwähnt, denke ich, dass Sie ein neues Bild mit einer benutzerdefinierten Dockerfile erstellen möchten (mit dem Bild, das Sie als Basisbild gezogen haben), ADD Ihr Zertifikat, dann RUN update-ca-certificates. Auf diese Weise erhalten Sie bei jedem Start eines Containers aus diesem neuen Image einen konsistenten Status.

# Dockerfile 
FROM some-base-image:0.1 
ADD you_certificate.crt:/container/cert/path 
RUN update-ca-certificates 

ist ein docker build gegen diese Dockerfile erzeugt image_id sagen lassen. Auf dem nächsten docker run -d [any other options] IMAGE_ID hat der Container, der mit diesem Befehl gestartet wurde, Ihre Zertifikatsinformationen. Einfach und reproduzierbar.

+0

Normalerweise würde ich die Docker Run-V-Lösung in anderen Antworten erwähnt bevorzugen. Aber Ihre Lösung funktioniert auch, wenn Sie während des Docker-Builds Zertifikate benötigen. Vielen Dank! – bastian

+3

Ich würde vorsichtig sein, Zertifikate in jeden öffentlichen Container zu setzen. Jemand anderes könnte Ihren Container ziehen und Ihre privaten Zertifikate herausziehen. – skibum55

+2

Das ist ein sehr guter Punkt, aber die obige Lösung macht nichts öffentlich. Dadurch können Sie eigene Zertifikate in ein Bild einfügen, das lokal erstellt und dann privat verwendet wird. Sie könnten dann das resultierende Bild in ein öffentliches Repository verschieben, aber das wäre eine schlechte Idee, wie Sie gesagt haben. – shudgston