it-swarm.com.de

"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 es tritt der folgende Fehler auf: "Fehlerantwort des Dämons: Kein Befehl angegeben".

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

docker --version
Docker version 1.10.1, build 9e83765
docker pull ubuntu
docker run --name u1 -dit ubuntu:latest
docker export -o exported u1
docker stop u1
docker rm u1
docker import exported ubuntu:imported
docker run --name u1 -dit ubuntu:imported
docker: Error response from daemon: No command specified.

In diesem Beispiel ziehen wir zuerst ein Image (Ubuntu) und erstellen/führen erfolgreich den Container u1 Daraus aus. Dann exportieren wir diesen Container in eine Datei (exported), stoppen/entfernen den Container, importieren die Datei in ein neues Image (ubuntu:imported) Und versuchen, einen neuen Container daraus auszuführen. Es schlägt fehl.

17
Greendrake

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

Wenn der ursprüngliche Container beispielsweise einwandfrei lief, weil die Docker-Datei, die zum Erstellen des Images verwendet wurde, CMD ["/usr/bin/supervisord"] Enthielt, importieren Sie Ihren Speicherauszug folgendermaßen:

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

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" msSQL

docker 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 Exportcomputer aufzulisten und den ausgeführten Befehl zu überprüfen.

docker ps

(enter image description here

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

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

Beim Exportieren eines Containers ging der eigene Verlauf verloren, der Bildebenen und Metadaten enthält. Ihr Container hat also seine PID-Zustände verloren.

Jeder Container sollte einen anfänglichen (Root-) Prozess haben. Sie überschreiben den Standardeinstiegspunkt in der Docker-Datei als Bash. [bearbeitet] Ich denke, auch wenn Sie nicht überschreiben, wird die Standardeinstellung verwendet, die im Ubuntu-Basis-Image nicht definiert ist. Sie sollten Ihren ersten Prozess also mit dem Befehl cmd starten. Ich denke, es gibt keinen Fehler. Es ist eine Docker-Datei-Funktion für die Wiederverwendbarkeit.

1
pmoksuz

Mit diesen zusätzlichen Schritten funktioniert es:

  1. Erstellen Sie Dockerfile wie folgt:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. Neues Image erstellen:

    docker build -t ubuntu:importedwithdockerfile .
    
  3. Jetzt läuft es:

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

Es ist jedoch immer noch unklar, warum einfach exportierte und dann importierte Bilder nicht sofort funktionieren. Ist das ein Fehler?

0
030