Docker-Image zum Übertragen auf ein nicht mit dem Internet verbundenes Gerät herunterladen

57

Ich arbeite in einem Büro, in dem mein Laptop mit dem Internet verbunden ist, aber streng kontrolliert wird. Ich darf keine nicht autorisierte Software darauf installieren.

Meine Entwicklungs-Workstation gehört mir, wie ich möchte, hat aber keine Internetverbindung.

Kann ich Docker-Images vom Hub als Datei herunterladen, die ich dann per Sneaker-Net auf meine Entwickler-Workstation übertragen kann? Ähnlich wie ich RPMs oder Ruby Gems herunterladen und auf CD brennen kann? Oder ist die einzige Möglichkeit, die Bilder mit dem Befehl "Docker Pull" herunterzuladen?

shearn89
quelle

Antworten:

86

Kurz: Verwenden Sie den saveCLI-Befehl.

https://docs.docker.com/engine/reference/commandline/save/


Sie können das Bild auf einem Computer abrufen, der Zugang zum Internet hat.

sudo docker pull ubuntu

Dann können Sie dieses Bild in einer Datei speichern

sudo docker save -o ubuntu_image.docker ubuntu

Übertragen Sie die Datei auf den Offline-Computer (USB / CD / was auch immer) und laden Sie das Image aus der Datei:

sudo docker load -i ubuntu_image.docker

(Bei älteren Versionen war dies nur docker load image.docker, siehe Kommentare für weitere Informationen.)

Booba Skaya
quelle
Genial, wirbel es heute Abend durch. Danke!
shearn89
2
Vorbeigehen, realisiert, dass sie nicht mehr verwenden docker load <image>, sondern docker load < ubuntu_image.dockerstattdessen verwenden. docs.docker.com/engine/reference/commandline/load
Lionel Chan
11
musste tun sudo docker load -i ubuntu_image.dockeroder es würde nicht funktionieren
John Culviner
Ich habe das gleiche Setup wie @ shearn89, nachdem ich mit dockertools auf einen lokalen Computer gezogen und die Datei in die Entwicklungsumgebung verschoben habe, erhalte ich die Fehlermeldung "Linux-Image kann unter Windows nicht geladen werden". Sowohl die lokale Maschine als auch die Entwicklungsumgebung sind Windows. Wissen Sie, was dieser Workflow dazu führt, dass ein Linux-Image erstellt wird?
Ryan Haunfelder
27

Mir ist klar, dass es bereits eine akzeptierte Antwort gibt, aber ich wollte diese Lösung anbieten, die meiner Meinung nach direkter auf die gestellte Frage eingeht: "Wie lade ich ein Docker-Image herunter, ohne Docker zum Abrufen zu verwenden?"

Ich habe ein ähnliches Problem, bei dem die Richtlinien meines Unternehmens erfordern, dass ich einem Team die zu verwendenden Dateien (normalerweise über eine URL) zur Verfügung stelle. Anschließend führen sie verschiedene Scans und Audits durch und platzieren die Datei (en) in unserem nicht verbundenen Entwicklungsnetzwerk. Ich kann Docker nicht verwenden, um die Datei abzurufen, sie dann zu exportieren und an dieses Team weiterzuleiten. Die andere Antwort war daher für mich keine Option.

Zum Glück habe ich diese Antwort auf StackOverflow gefunden, das die Verwendung eines nützlichen Tools von samalba unter GitHub empfiehlt: https://github.com/samalba/docker-registry-debug

Natürlich sollte dieses Tool mit Docker erstellt werden, und ein Grund, warum ich es brauche, ist, dass ich keinen offenen Zugang zu Docker habe :). Da ich diese Option nicht hatte, erläutere ich die Schritte, die ich hier unternommen habe.

$ go get github.com/dustin/go-humanize
$ go build
$ ./docker-registry-debug --help
$ ./docker-registry-debug curlme docker ubuntu

Die Ausgabe dieses Befehls ist eine vollständige Curl-Befehlszeile, mit der die Datei heruntergeladen werden kann:

# Reading user/passwd from env var "USER_CREDS"
# No password provided, disabling auth
# Getting token from https://index.docker.io
# Got registry endpoint from the server: https://registry-1.docker.io
# Got token: signature=e145911c2e458b3842e4e92c90bbf5bf2c17bd56,repository="library/docker",access=read
curl -i --location-trusted -I -X GET -H "Authorization: Token signature=e145911c2e458b3842e4e92c90bbf5bf2c17bd56,repository="library/docker",access=read" https://registry-1.docker.io/v1/images/ubuntu/layer

Hoffe das hilft jemand anderem!

Dan
quelle