J'essaie de prendre un conteneur Docker d'une machine et de l'exécuter sur une autre et de rencontrer cette erreur: " Réponse d'erreur du démon: aucune commande spécifiée ".
Voici un exemple simplifié illustrant le problème:
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.
Dans cet exemple, nous tirons d'abord une image (ubuntu) et créons / exécutons avec succès un conteneur à u1
partir de celle-ci. Ensuite, nous exportons ce conteneur dans un fichier ( exported
), arrêtons / supprimons le conteneur, importons le fichier dans une nouvelle image ( ubuntu:imported
) et essayons d'exécuter un nouveau conteneur à partir de celui-ci. Il échoue.
docker inspect imagename:tagname
comparaison de l'original et de celui importé. Je n'ai pas eu de chance avecimport
/export
et--change
, bien que tout fonctionne bien avecsave
/load
.Vous avez cette erreur lorsque vous essayez d'exporter et d'importer Docker
microsoft/mssql-server-linux
.https://hub.docker.com/r/microsoft/mssql-server-linux/
Commandes d'exportation et d'importation:
Cependant, nous n'avons pas pu trouver la commande pour l'exécuter. La solution consistait à répertorier tous les conteneurs sur la machine d'exportation et à exécuter la commande.
De là, nous pourrions découvrir comment exécuter la commande correcte:
la source
Lorsque vous exportez un conteneur, il a perdu son propre historique qui contient des couches d'images et des métadonnées. Votre conteneur a donc perdu ses états pid.
Chaque conteneur doit avoir un processus initial (racine). Vous remplacez le point d'entrée par défaut du dockerfile en tant que bash. [modifié] Je pense que même si vous ne remplacez pas, il utilise par défaut, non défini dans l'image de base ubuntu. Vous devez donc démarrer votre processus initial avec la commande cmd. Je pense qu'il n'y a pas de bug. C'est une fonction de dockerfile pour la réutilisabilité.
la source
Je l'ai fait avec ces étapes supplémentaires:
Créez Dockerfile comme suit:
Construire une nouvelle image:
Maintenant, il s'exécutera:
Cependant, on ne sait toujours pas pourquoi l'image simplement exportée puis importée ne fonctionne pas immédiatement. Est-ce un bug?
la source
vous pouvez utiliser la
docker load
commande pour charger des images à partir du fichier d'archive. cette commande importera le fichier image et les arguments ensemble.la source
docker load
etdocker save
opèrent sur des images de conteneurs (à partir desquelles les conteneurs sont créés),docker import
etdocker export
opèrent sur des conteneurs.