web-dev-qa-db-fra.com

quitté avec le code 0 docker

J'essaie de lancer un conteneur à l'aide de services de composition par docker, mais malheureusement, le conteneur est sorti avec le code. Les conteneurs sont construits grâce à un référentiel issu d'une archive .tar.gz. Cette archive est une machine virtuelle Centos.

Je veux créer 6 conteneurs à partir de la même archive. Au lieu de taper 6 fois la commande docker, je voudrais créer un fichier docker-compose.yml où je peux résumer leur commande et leur balise.

J'ai commencé à écrire le fichier docker-compose.yml juste pour créer un conteneur.

Voici mon docker-compose.yml:

version: '2'
services:
  dvpt:
   image: compose:test.1
   container_name: cubop1
   command: mkdir /root/essai/
   tty: true

Ne faites pas attention à la commande car je viens d'en spécifier une.

Donc ma question est, pourquoi le conteneur sort? Existe-t-il une autre solution pour construire ces conteneurs en même temps?

Merci pour vos réponses.

13
Sylvain M.J.

La réponse est en fait le premier commentaire. Je vais expliquer un peu le commentaire de Miguel.

Tout d'abord, nous devons comprendre qu'un conteneur Docker exécute une seule commande. Le conteneur s'exécutera tant que ce processus exécuté par la commande démarrée. Une fois le processus terminé et terminé, le conteneur s'arrête.

Avec cette compréhension, nous pouvons faire l'hypothèse de ce qui se passe dans votre cas. Lorsque vous démarrez votre service dvpt, il exécute la commande mkdir /root/essai/. Cette commande crée le dossier, puis se ferme. À ce stade, le conteneur Docker est arrêté car le processus s'est arrêté (avec l'état 0, indiquant que mkdir s'est terminé sans erreur).

23
Andy Shinn

Vous pouvez terminer avec une commande comme tail -f/dev/null

Cela fonctionne souvent dans mon docker-compose.yml avec

command: tail -f /dev/null

Et il est facile de voir comment je continue à faire fonctionner le conteneur.

docker ps

2
shgnInc

Une solution consiste à créer un processus qui ne se termine pas, une boucle infinie ou quelque chose qui peut fonctionner en continu en arrière-plan. Cela gardera le conteneur ouvert car le processus ne se terminera pas.

C'est vraiment un hack. Je cherche toujours une meilleure solution.

L'image du serveur Zend fait quelque chose comme ça. Dans leur script .sh, ils ont une commande finale:

exec /usr/local/bin/nothing

Qui exécute un fichier qui s'exécute en continu en arrière-plan. J'ai essayé de copier le contenu du fichier ici mais il doit être en binaire.

EDIT: vous pouvez également terminer votre fichier avec /bin/bash qui commence un nouveau processus terminal dans le conteneur et l'empêche de se fermer.

2
Knight