"Kein Befehl angegeben" aus erneut importiertem Docker-Image / Container

Ich versuche, einen Docker-Container von einem Computer zu nehmen und auf einem anderen auszuführen, und stoße auf diesen Fehler: "Fehlerantwort vom Daemon: Kein Befehl angegeben".

Unten sehen Sie ein vereinfachtes Beispiel, das das Problem zeigt:

docker --versionDocker version 1.10.1, build 9e83765docker pull ubuntudocker run --name u1 -dit ubuntu:latestdocker export -o exported u1docker stop u1docker rm u1docker import exported ubuntu:importeddocker run --name u1 -dit ubuntu:importeddocker: Error response from daemon: No command specified.

In diesem Beispiel ziehen wir zuerst ein Image (Ubuntu) und erstellen / führen erfolgreich einen Container aus u1 daraus. Dann exportieren wir diesen Container in eine Datei (exported), stoppen/Entfernen des Containers, Importieren der Datei in ein neues Image (ubuntu:imported) und versuchen, einen neuen Container daraus auszuführen. Es scheitert.

docker export exportiert nicht alles über den Container - nur das Dateisystem. Wenn Sie den Dump also wieder in ein neues Docker-Image importieren, müssen zusätzliche Flags angegeben werden, um den Kontext neu zu erstellen.

Zum Beispiel, wenn der ursprüngliche Container einwandfrei lief, weil die Docker-Datei, die zum Erstellen des Images verwendet wurde, Folgendes hatte CMD ["/usr/bin/supervisord"] importieren Sie dann Ihren Dump auf diese Weise:

docker import \--change 'CMD ["/usr/bin/supervisord"]' \path/to/dump.tar imagename:tagname

Beim Versuch, Docker zu exportieren und zu importieren, ist dieser Fehler aufgetreten microsoft/mssql-server-linux.

https://hub.docker.com/r/microsoft/mssql-server-linux/

Befehle zum Exportieren und Importieren:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQLdocker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Wir konnten jedoch den Befehl zum Ausführen nicht finden. Die Lösung bestand darin, alle Container auf dem exportierenden Computer aufzulisten und den Befehl ran zu betrachten.

docker ps

enter image description here

Von dort aus konnten wir herausfinden, wie man den richtigen Befehl ausführt:

docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr

Wenn Sie einen Container exportieren, hat er einen eigenen Verlauf verloren, der Bildebenen und Metadaten enthält. Ihr Container hat also seine PID-Zustände verloren.

Jeder Container sollte einen initialen (Root-) Prozess haben. Sie überschreiben den Standardeintrittspunkt in der Docker-Datei als Bash. [bearbeitet] Ich denke, selbst wenn Sie es nicht überschreiben, wird der Standard verwendet, der nicht im Ubuntu-Basisimage definiert ist. Sie sollten also Ihren anfänglichen Prozess mit dem Befehl cmd starten. Ich denke, es gibt keinen Fehler. Es ist eine Dockerfile-Funktion zur Wiederverwendbarkeit.

bei Verwendung von import

docker save nginx:alpine | ssh rmeote-host docker import -sha256:f6098fc18511abbbfe9e52ed0d0ccc1fbe4f7b018ee1cd85392999aa92ebba1b# we see errorsdocker container run -d -p 2020:80  nginx:alpinedocker: Error response from daemon: No command specified.See 'docker run --help'.

bei Verwendung von load

docker save nginx:alpine | ssh remote-host "cat - | docker load"Loaded image: nginx:alpinedocker container run --name nginx -dp 2020:80 nginx:alpine7cc8836bef1e276f8aa986a09186e9e227542be3b094b082b9ab1f6d3c290a99docker psCONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS                                   NAMES7cc8836bef1e   nginx:alpine   "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:2020->80/tcp, :::2020->80/tcp   nginx

Habe es mit diesen zusätzlichen Schritten zum Laufen gebracht:

  1. Dockerfile wie folgt erstellen:

    FROM ubuntu:importedENTRYPOINT bash
  2. Neues Image erstellen:

    docker build -t ubuntu:importedwithdockerfile .
  3. Jetzt wird es laufen:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

Es ist jedoch immer noch unklar, warum einfach exportiertes und dann importiertes Bild nicht sofort funktioniert. Ist das ein Bug?