Docker-Abbild aus Datei hinzufügen

Status
Für weitere Antworten geschlossen.

m_hombach

Benutzer
Mitglied seit
03. Aug 2015
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Hi.
Wie kann ich auf meiner DS im Docker Paket ein Abbild aus einer Datei hinzufügen?
Das Menü dazu finde ich natürlich, nur bin ich mir nicht so sicher, was für eine Datei er von mir möchte. Ich habe einen Docker Container auf meinem PC erstellt, per Dockerfile.
Wenn ich die Dockerdatei (also mit den "FROM" und "RUN" Statements), dann bekomme ich nur einen Fehler, dass das Format falsch ist.
Der Container ist aber valide, ich kann ihn also erstellen und ausführen.
Wie kann ich also lokal einen Container erstellen/definieren und ihn auf meiner DS laufen lassen?`

Würde mich riesig über eure Hilfe freuen :)
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Ein Docker Image kann auf einem Docker-Host mittels `docker save --output name-zieldatai.tar {imagename:tag}` exportiert werden.

Ein Dockerfile ist die Blaupause zum erstellen eines Images. Erst wenn ein Image erfolgreich gebaut ist, kann es exportiert und in der DS wieder importiert werden.
Ohne den genauen Bau-Befehl zu kennen und die Build-Logs zu sehen, kann man die Situation nicht beurteilen.
 

m_hombach

Benutzer
Mitglied seit
03. Aug 2015
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Hmm, also erstmal mega danke für die Info.
Hab es jetzt damit versucht und ich bekomme keinen Fehler mehr.
Allerdings taucht das image bei mir danach auch nicht auf.

Folgendes habe ich gemacht:
- dockerfile erstellt mit "FROM ALPINE:latest" und einer zeile "RUN echo "test123"
- "docker build" ausgeführt
- per "docker images" die id herausgefunden
- mit hilfe deines genannten commands und meiner id ein tar-archiv erstellt ( ca 6 mb)
- diese tar-datei auf einen ordner auf meiner Diskstation hochgeladen (vorher auf meinem pc die rechte der tar-datei auf 777 gesetzt)
- auf der DS in der GUI auf docker -> abbild -> hinzufügen -> aus datei -> meine tar-datei ausgewählt

Ich sehe eine kurze ladeanimation, dann ist die ladeanimation wg und ich sehe nur das darunterliegende "sie haben keine abbilder heruntergeladen..."
Im tab "protokoll" von docker steht nur "add image from test.tar".

Hab ich irgendwas übersehen? Von meinem Verständnis müsste, nachdem ich das tar headdet habe, es unter "abbild" erscheinen, oder?

edit: wenn ich über container -> einstellungen -> importieren meine datei hochlade, klappt es wohl. dann erscheint die datei unter "abbild". Ist das ein bug? Oder missverstehe ich hier wieder etwas?
Allerdings bekomme ich beim starten des containers dann die meldung, dass ich den befehl definieren soll (unter dem entrypoint) und ich habe in meiner dockerfile eigentlich schon "CMD ping localhost" stehen. Bin verwirrt, vllt werf ich auch nur ein paar Sachen durcheinander?
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
ich vermute in der Oberfläche ist es nicht vorgesehen Images ohne Tag anzuzeigen (... oder es ist tatsächlich ein Bug). Normalerweise transportiert man Images nicht händisch von einer Docker-Engine auf eineAandere, sondern nutzt Dockerhub oder ein privates Image-Respository, um das fertige Image dahin zu pushen und von anderen Docker-Engines wieder zu pullen.

Probier mal das Image mit einem Tag zu versehen: `docker build -t {image name}:{tag} .`, wenn man :{tag} weglässt müsste latest gebaut werden.
Beim save dann entsprechen {image name}:{tag} statt der containerid verwenden.

Der Weg über "Container->Einstellungen->importieren..." tut etwas anderes: einen Container inkl. Zustand (+ zugehörigen Image?) importieren.
Wer einen Container exportieren und woanders wieder importieren will, hat zu 99,999% vorher etwas falsch gemacht... Normalerweise erzeugt man aus einem Image einen Container.

Dauerhaft zu speichernde Daten müssen in einem Volume liegen - im Falle der DS immer ein lokaler Pfad der DS, der in einen Pfad im Container gemountet wird. Hier sollten entsprechende Hinweise zu finden sein, in der Image-Beschreibung auf Dockerhub zu finden sein, in welchen Container-Pfaden die Dauerhaft zu speichernenden Daten abgelegt werden. Für diese sollte man dann ein Volume(-mapping) anlegen. Man kann belebig oft den Container entfernen und neu anlegen solange die dauerhaften Daten in einem Volume liegen und man das beim Erzeugen eines Containers wieder angibt.
 
Zuletzt bearbeitet:

m_hombach

Benutzer
Mitglied seit
03. Aug 2015
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Hey :)
Nachdem ich wieder Zeit gefunden habe und ein wenig herumprobiert habe scheint es tatsächlich so, dass nur ein tag fehlte. Finde, das ist ein Bug, aber ich kann damit dann jetzt umgehen.
Heißt: Ich save das image zusammen mit einem tag in einer tar-datei und kann diese dann unter dem korrekten Menüpunkt "aus einer datei" dort einfügen.
Container starten usw klappt dann ohne probleme.

Mega danke, keine ahnung ob ich da jemals alleine drauf gekommen wäre :)
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Die Terminology ist auch leider nicht immer klar.

Die Angabe {group}{repo}:{tag} hat in unterschiedlichen Kontexten einen unterschiedlichen Name (warum auch immer?!):
- beim Bauen mit `docker build -t ` wird sie in der Doku als Tag bezeichnet
- beim Starten/Erzeugen eines Container mit `docker run` oder docker-compose wird sie in der Doku als Image bezeichnet
- Beim umtaggen eines Tags mit `docker tag` wird es in der Doku dann weider als Tag bezeichnet

Wenn ":{tag}" nicht angegeben wird, wird implizit das latest-Tag verwendet - wenn der Image-Maintainer das nicht pflegt hat man pech gehabt.
Bei einem privaten Image Repo (=selbstbetrieben) steht {server-name}/ vor {group}{repo}:{tag}.

Wenn man von der Version/dem Label eines Images spricht (also dem Wert nach dem Doppelpunkt) wird wiederum auch von einem Tag gesprochen.
Ein solches Tag zeigt auf Meta-Daten und die wiederum auf Image-Layer, die dann am Ende "das Image" ausmachen.

In der professionellen Welt werden alle Images getagged und in der Regel auf private Image Repositories abgelegt - Das "latest"-Tag wird da auch höchsten auf Entwickler-Notebooks verwendet. Mit `docker save` arbeitet man eingetlich nur, wenn man Images in eine luftdichte Umgebung bringen muss, die nicht am Internet hängt und man auch sonst keine Chance hat das Image dort hochzuladen.

Bug? Wenn Du die Passage in der Doku findest die explizit beschreibt das es mit der Imageid geht, dann ist es wohl ein Bug. Wenn es dort nicht steht, dann wird es eher an der abweichenden Erwartung liegen.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat