Je suis complètement novice dans les dockers. J'ai essayé de démarrer un conteneur sorti comme suit,
J'ai répertorié tous les conteneurs disponibles en utilisant
docker ps -a
. Il énumère les éléments suivants:J'ai entré les commandes suivantes pour démarrer le conteneur qui est dans l'étape de sortie et entrer dans le terminal de cette image.
docker start 79b3fa70b51d docker exec -it 79b3fa70b51d /bin/sh
Il lance l'erreur suivante.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
Mais quand je démarre le conteneur en utilisant docker start 79b3fa70b51d
. Il jette l'ID du conteneur en sortie, ce qui est normal si tout fonctionne normalement. Je ne suis pas sûr de la cause de cette erreur. Toute idée sur les causes et suggestions à ce sujet me serait très utile. Merci d'avance.
docker
docker-container
Étranger
la source
la source
Réponses:
Container
79b3fa70b51d
semble ne faire qu'unecho
.Cela signifie qu'il démarre, fait écho puis quitte immédiatement.
La
docker exec
commande suivante ne le trouverait pas en cours d'exécution pour s'attacher à ce conteneur et exécuter une commande: il est trop tard. Le conteneur est déjà sorti.la source
docker run -it --rm udhayakumar/busyboxwithtouch
devrait suffire pour ouvrir une session. Le point d'entrée par défaut doit être / bin / sh, mais cela dépend de votre Dockerfile: vous avez peut-être défini un autre point d'entrée et / ou un CMD différent.docker exec
) y attacher.Par défaut, le conteneur Docker se fermera immédiatement si aucune tâche n'est en cours d'exécution sur le conteneur.
Pour que le conteneur continue de fonctionner en arrière-plan, essayez de l'exécuter avec l' argument
--detach
(ou-d
).Pour des exemples:
la source
S'il n'est pas possible de redémarrer le processus principal (assez longtemps), il y a aussi la possibilité de faire
commit
passer le conteneur à une nouvelle image et d'exécuter un nouveau conteneur à partir de cette image. Bien que ce ne soit pas le flux de travail habituel des meilleures pratiques , je trouve qu'il est vraiment utile de déboguer un script défaillant de temps en temps.la source
bash
processus dans le conteneur. Vous aviez probablement déjà un serveur Web en cours d'exécution, vous devrez donc vérifier quelle commande doit être utilisée pour remettre le serveur en marche.Tout d'abord, nous devons démarrer le conteneur docker
Après cela, vérifiez le conteneur du docker:
Puis exécutez en utilisant la commande ci-dessous:
la source
C'est généralement le cas avec la plupart des images de base du système d'exploitation (centos, Debian, etc.), ou également avec les images de nœuds .
Votre meilleur pari est d'exécuter l'image en mode interactif . Exemple ci-dessous avec l' image du nœud :
La sortie est
root@cacc7897a20c:/# echo $SHELL /bin/bash
la source
Voici ce qui a fonctionné pour moi.
Obtenez l'ID du conteneur et redémarrez.
la source
La raison est exactement ce que dit la réponse acceptée. J'ajoute des informations supplémentaires, qui peuvent fournir une meilleure compréhension de ce problème.
Created
,Running
,Stopped
,Exited
,Dead
et d' autres que je sache.docker create
, le démon docker crée un conteneur avec son statutCreated
.docker start
, le démon docker démarrera un conteneur existant dont l'état peut êtreCreated
ouStopped
.docker run
, le démon docker le terminera en deux étapes:docker create
etdocker start
.docker stop
, évidemment, le démon docker arrêtera un conteneur. Ainsi, le conteneur serait enStopped
état.Exited
.Quand le processus se termine-t-il? En un autre mot, quel est le processus, comment l'avons-nous lancé?
La réponse est
CMD
dans un fichier docker oucommand
dans l'expression suivante, qui estbash
par défaut dans certaines images, c'est-à-dire ubutu: 18.04.la source
Cela a été publié par L0j1k dans le post ci-dessous et a fonctionné pour moi.
Comment entrer dans la coque d'un conteneur Docker?
la source
Pour quiconque tente quelque chose de similaire en utilisant un Dockerfile ...
L'exécution en mode détaché n'aidera pas. Le conteneur se fermera toujours (s'arrêtera de fonctionner) si la commande n'est pas bloquante, c'est le cas avec bash.
Dans ce cas, une solution de contournement serait: 1. Validez l'image résultante: (container_name = le nom du conteneur sur lequel vous voulez baser l'image, image_name = le nom de l'image à créer docker commit container_name image_name 2. Utilisez docker run pour créer un nouveau conteneur en utilisant la nouvelle image, en spécifiant la commande que vous voulez exécuter. Ici, je vais lancer "bash": docker run -it image_name bash
Cela vous donnerait la connexion interactive que vous recherchez.
la source
docker run -it <image_id> /bin/bash
Exécuter en mode interactif en exécutant puis bash shell
la source
-d
drapeau est une faute de frappe ici?Voici une solution lorsque le conteneur Docker se ferme normalement et que vous pouvez modifier le Dockerfile.
En règle générale, lorsqu'un conteneur Docker est exécuté, une application est servie en exécutant une commande. À partir de la référence Dockerfile ,
Lorsque vous créez une image et ne spécifiez aucune commande avec CMD ou ENTRYPOINT, la commande CMD ou ENTRYPOINT de l'image de base est exécutée.
Par exemple, le Dockerfile officiel Ubuntu a
CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Désormais, labin/bash/
commande peut accepter l'entrée et ladocker run -it IMAGE_ID
commande attache STDIN au conteneur. Le résultat est que vous obtenez un terminal interactif et le conteneur continue de fonctionner.Lorsqu'une commande avec CMD ou ENTRYPOINT est spécifiée dans le Dockerfile, cette commande est exécutée lors de l'exécution du conteneur. Maintenant, si cette commande peut se terminer sans nécessiter aucune entrée, elle se terminera et le conteneur se fermera.
docker run -it IMAGE_ID
ne pas fournir le terminal interactif dans ce cas. Un exemple serait l'image du docker construite à partir du Dockerfile ci-dessous -Si vous devez vous rendre sur le terminal de cette image, vous devrez maintenir le conteneur en marche en modifiant la commande entrypoint.
Après avoir exécuté le conteneur normalement avec
docker run IMAGE_ID
, vous pouvez simplement accéder à un autre terminal et utiliserdocker exec -it CONTAINER_ID bash
pour obtenir le terminal du conteneur.la source
Dans mon cas, j'ai changé certains noms de fichiers et noms de répertoires du répertoire parent du Dockerfile. En raison de quel conteneur ne trouve pas les paramètres requis pour le redémarrer.
Après l'avoir renommé aux noms d'origine, le conteneur a commencé comme du beurre.
la source
J'ai une vision différente de cela. Je pourrais faire un
docker ps
et voir qu'il y a un conteneur docker en cours d'exécution, j'ai même essayé de le redémarrer, mais dès que j'essayais d'obtenir une session pour cela,New-PSSession -ContainerId $containerId -RunAsAdministrator
cela ferait une erreur en disant:Mon problème était que je fonctionnais avec le service réseau et qu'il n'avait pas assez d'autorisations pour voir le conteneur, même si je lui avais donné des autorisations pour exécuter des commandes docker (avec la configuration du groupe de sécurité docker)
Je ne savais pas comment activer le travail avec des conteneurs, j'ai donc dû recommencer à l'exécuter en tant qu'utilisateur administrateur à la place
la source