Jedes RUN
Mal, wenn Docker einen Befehl aus einer Docker-Datei erfolgreich ausführt , wird eine neue Ebene im Image-Dateisystem festgeschrieben. Praktischerweise können Sie diese Ebenen-IDs als Bilder verwenden, um einen neuen Container zu starten.
Nehmen Sie die folgende Docker-Datei:
FROM busybox
RUN echo 'foo' > /tmp/foo.txt
RUN echo 'bar' >> /tmp/foo.txt
und baue es:
$ docker build -t so-2622957 .
Sending build context to Docker daemon 47.62 kB
Step 1/3 : FROM busybox
---> 00f017a8c2a6
Step 2/3 : RUN echo 'foo' > /tmp/foo.txt
---> Running in 4dbd01ebf27f
---> 044e1532c690
Removing intermediate container 4dbd01ebf27f
Step 3/3 : RUN echo 'bar' >> /tmp/foo.txt
---> Running in 74d81cb9d2b1
---> 5bd8172529c1
Removing intermediate container 74d81cb9d2b1
Successfully built 5bd8172529c1
Sie können nun einen neuen Container aus starten 00f017a8c2a6
, 044e1532c690
und 5bd8172529c1
:
$ docker run --rm 00f017a8c2a6 cat /tmp/foo.txt
cat: /tmp/foo.txt: No such file or directory
$ docker run --rm 044e1532c690 cat /tmp/foo.txt
foo
$ docker run --rm 5bd8172529c1 cat /tmp/foo.txt
foo
bar
Natürlich möchten Sie vielleicht eine Shell starten, um das Dateisystem zu erkunden und Befehle auszuprobieren:
$ docker run --rm -it 044e1532c690 sh
/ # ls -l /tmp
total 4
-rw-r--r-- 1 root root 4 Mar 9 19:09 foo.txt
/ # cat /tmp/foo.txt
foo
Wenn einer der Dockerfile-Befehle fehlschlägt, müssen Sie nach der ID der vorhergehenden Ebene suchen und eine Shell in einem Container ausführen, der aus dieser ID erstellt wurde:
docker run --rm -it <id_last_working_layer> bash -il
Einmal im Container:
- Versuchen Sie den fehlgeschlagenen Befehl und reproduzieren Sie das Problem
- Korrigieren Sie dann den Befehl und testen Sie ihn
- Aktualisieren Sie schließlich Ihre Docker-Datei mit dem festen Befehl
Wenn Sie wirklich in der tatsächlichen Ebene experimentieren müssen, die fehlgeschlagen ist, anstatt in der letzten Arbeitsebene zu arbeiten, lesen Sie Drews Antwort .
/var/lib/docker/aufs/diff/3afa404e[...]/.cpanm
sind Interna von Docker und ich würde mich nicht mit ihnen