"Nessun comando specificato" dall'immagine / contenitore della finestra mobile reimportata


16

Sto provando a prendere un contenitore docker da una macchina ed eseguirlo su un'altra e riscontrando questo errore: " Risposta dell'errore dal demone: Nessun comando specificato ".

Di seguito è riportato un esempio semplificato che mostra il problema:

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 questo esempio, prima estraiamo un'immagine (ubuntu) e creiamo / eseguiamo correttamente il contenitore u1da essa. Quindi esportiamo quel contenitore in un file ( exported), arrestiamo / rimuoviamo il contenitore, importiamo il file in una nuova immagine ( ubuntu:imported) e proviamo a eseguire un nuovo contenitore da esso. Fallisce.

Risposte:


16

docker exportnon esporta tutto sul contenitore, ma solo sul filesystem. Pertanto, quando si importa di nuovo il dump in una nuova immagine docker, è necessario specificare flag aggiuntivi per ricreare il contesto.

Ad esempio, se il contenitore originale funzionava correttamente perché conteneva il file Docker utilizzato per creare la sua immagine CMD ["/usr/bin/supervisord"], importare il dump in questo modo:

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

2
È possibile eseguire docker inspect imagename:tagnameconfrontando l'originale e quello importato. Non ho avuto fortuna con import/ exporte --change, sebbene tutto funzioni bene con save/ load.
earcam

2

È stato visualizzato questo errore durante il tentativo di esportazione e importazione della finestra mobile microsoft/mssql-server-linux.

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

Comandi per esportare e importare:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQL

docker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Tuttavia non siamo riusciti a trovare il comando per eseguirlo. La soluzione stava elencando tutti i contenitori sulla macchina esportatrice e guardando il comando eseguito.

docker ps

inserisci qui la descrizione dell'immagine

Da lì abbiamo potuto scoprire come eseguire il comando corretto:

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

1

Quando si esporta un contenitore ha perso la propria cronologia che contiene livelli immagine e metadati. Quindi il tuo contenitore ha perso i suoi stati pid.

Ogni contenitore dovrebbe avere un processo iniziale (root). Stai sostituendo il punto di accesso predefinito nel file docker come bash. [modificato] Penso che anche tu non abbia la precedenza, usa l'impostazione predefinita, non definita nell'immagine di base di Ubuntu. Quindi dovresti iniziare il processo iniziale con il comando cmd. Penso che non ci siano bug. È una funzione file docker per la riusabilità.


Sto sostituendo il punto di accesso nella soluzione alternativa solo al problema originale. Nulla viene sovrascritto durante l'esportazione / importazione.
Greendrake,

ciao @DrakeES la mia risposta è appena stata aggiornata. Spiego cosa succede quando esporti un container.
pmoksuz,

0

Ha funzionato con questi passaggi aggiuntivi:

  1. Crea Dockerfile come segue:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. Crea nuova immagine:

    docker build -t ubuntu:importedwithdockerfile .
    
  3. Ora verrà eseguito:

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

Tuttavia, non è ancora chiaro perché le immagini esportate e importate semplicemente non funzionino immediatamente. è un insetto?


-1

puoi usare il docker loadcomando per caricare immagini dal file di archivio. questo comando importerà il file immagine e args insieme.


1
Che cos'è il file "archivio" in questo caso e come crearlo?
Greendrake,

2
@Greendrake docker loade docker saveoperare su immagini container (da cui vengono create contenitori), mentre docker importe docker exportoperare su contenitori.
Michael Hampton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.