2014-12-17 5 views
8

Meine mögliche Problemumgehung für das Problem unten war, unsere IT-Jungs nicht zu man-in-the-Middle die Dockerhub-Registrierung zu überzeugen. Ich konnte leider nichts anderes zur Arbeit bringen.Docker auf Mac hinter Proxy, das SSL-Zertifikat ändert

Ich stoße auf ein Problem mit meinem ersten Versuch, Docker läuft auf meinem Mac bei der Arbeit, die 10.8.5 läuft. Es scheint, dass meine Firma Zertifikat-Rewriting-Proxy in der Art und Weise des Abrufens Bilder zu sein scheint immer:

orflongpmacx8:docker pohl_longsine$ docker run hello-world 
Unable to find image 'hello-world:latest' locally 
Pulling repository hello-world 
FATA[0001] Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "bcauth") 

(der Tat, wenn ich auf den Gast Wireless-log - die nicht die aufdringlichen Proxy hat - ich Vergangenheit kann Ich muss jedoch herausfinden, wie dies über den Proxy funktioniert, da die Verwendung des Gast-Wireless als langfristige Lösung unhaltbar ist.)

Mein Problem, auf der Oberfläche, scheint sehr ähnlich zu sein der eine antwortete in this question. Die akzeptierte Antwort in dieser Frage funktioniert jedoch nicht für mich, da die von ihnen diskutierte Datei nicht auf einem Mac aufgerufen wird. (Von herumlaufen, würde ich raten, dass root_cgo_darwin.go und/oder root_darwin.go stattdessen beteiligt wären.)

Das sagt mir nicht wirklich, wie, operationally, ich die äquivalente Arbeit tun muss, eine Art vertrauenswürdiges Zertifikat zu installieren. Ich habe es geschafft, eine *.cer Datei in die Hände zu bekommen, von der ich glaube, dass sie die ist, die ich brauche, aber ich weiß nicht, was ich damit anfangen soll.

Ich hoffe, dass jemand mir in die richtige Richtung zeigen kann.

Edit: Ich dachte, dass ich vielleicht zu etwas ähnlich wie this page suggests, um das Zertifikat hinzufügen musste. Ach, mein Versuch, diese Anweisungen nach gescheitertem in folgenden Weise:

orflongpmacx8:docker pohl_longsine$ sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "~/Desktop/Certs/redacted.cer" 
Password: 
***Error reading file ~/Desktop/Certs/redacted.cer*** 
Error reading file ~/Desktop/Certs/redacted.cer 

Edit 2: Ich einen Schritt näher gekommen ist, kann dies zu lösen. Ich hätte besser wissen müssen, einen Pfad mit einer Tilde in Anführungszeichen zu verwenden. Wenn ich stattdessen einen absoluten Pfad verwende, kann ich den obigen Befehl erfolgreich ausführen, um Zertifikate hinzuzufügen.

Ach, das nicht das letzte Symptom lindern:

FATA[0001] Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "bcauth") 
+2

die Der Docker-Daemon läuft nicht wirklich auf dem Mac, da er sehr linux-spezifisch ist. Ich nehme an, Sie verwenden Vagrant, um den Docker "Host" zu starten und dann über Sockets mit diesem zu kommunizieren.Ich würde mit Boot2docker raten. Der Docker-Daemon selbst kann ungültige Zertifikate ignorieren (wir verwenden einen Palo-Alto-Proxy, der dies auch tut). Sie müssen SSH an den Docker-Host vm und bearbeiten Sie/etc/default/Docker, um es zu sagen, um schlechte Zertifikate zu ignorieren (vergessen Sie die Option, kann es später hinzufügen, wenn ich eine Chance habe) –

+0

This: https://medium.com/ @ deeeet/building-private-docker-registry-mit-basic-authentication-with-self-signed-certificate-using-it-e6329085e612 kann helfen. Fügen Sie Ihr Firmen-Root-Zertifikat hinzu, das sie verwenden, um Zeug im Proxy zu signieren und alles wird gültig –

+1

Ja, ich benutze "boot2docker up", und der Docker-Daemon läuft tatsächlich in einer Linux-VM in VirtualBox. Schlägst du vor, dass ich wirklich versuchen sollte, das Cert in diese VM hinzuzufügen? (Oder konfiguriere es so, dass du schlechte Zertifikate ignorierst, wie du es gesagt hast). Ich fühle mich, als hätte ich einfach die reale Welt für Matrix verwechselt. – pohl

Antwort

7

Nach der boot2docker README

Insecure Registry 

As of Docker version 1.3.1, if your registry doesn't support HTTPS, you must add it as an insecure registry. 

$ boot2docker init 
$ boot2docker up 
$ boot2docker ssh 
$ echo 'EXTRA_ARGS="--insecure-registry <YOUR INSECURE HOST>"' | sudo tee -a /var/lib/boot2docker/profile 
$ sudo /etc/init.d/docker restart 
then you should be able to do a docker push/pull. 
+0

Ist die öffentliche Docker-Registry "unsicher"? Ich dachte, es erfordert HTTPS. Das fühlt sich an wie eine Antwort auf eine andere Frage. – pohl

+0

Nicht sicher, ob unsicher bedeutet http oder es bedeutet ungültiges Zertifikat. In Ihrem Fall haben Sie ein "ungültiges" Zertifikat aufgrund der Selbstsignatur des Proxys. Wenn Sie das CA-Zertifikat haben, können Sie es (in boot2docker vm) zu /etc/ssl/cacerts.pem hinzufügen (schauen Sie sich zuerst das Format an, um sicherzustellen, dass Ihr .cer derselbe Klartext ist) –

+0

Ausgezeichneter Punkt. Ich werde sein Experiment versuchen, wenn der Urlaub vorbei ist. – pohl

4

Die Quelle http://golang.org/src/crypto/x509/root_darwin.go zeigt, dass der Befehl ein:

cmd := exec.Command("/usr/bin/security", "find-certificate", "-a", "-p", "/System/Library/Keychains/SystemRootCertificates.keychain") 

verwendet wird, um das Zertifikat zu finden.

Versuchen Sie, die Datei .cer in die Schlüsselkette des OSX-Zertifikats hinzuzufügen.

+1

Vielen Dank für den Vorschlag. Ich habe meiner Frage einige Änderungen hinzugefügt, die zeigen, wie ich es geschafft habe, das zu tun, was Sie vorgeschlagen haben (denke ich). Es schien das Problem jedoch nicht zu lösen. – pohl

+0

versuchen Sie, den Andockdienst neu zu starten. Vielleicht möchten Sie auch die "--insecure-registry" -Dockerflagge sehen, aber sie ist ziemlich hackig und, wie der Name schon sagt, unsicher. Weitere Informationen unter https://docs.docker.com/reference/commandline/cli/#insecure-registries – Intermernet

0

Wenn Sie die Docker-Maschine

bearbeiten $ USER/.docker/Chemie/Pharma Maschinen/default verwenden/config.json

"EngineOptions": { 
    "InsecureRegistry": [ 
     "XXX.XXX.virtual" 
    ], 
}