2017-07-03 3 views
3

Je suis en train de lancer le conteneur en utilisant des services docker-composer.Mais malheureusement, conteneur est sorti avec le code 0. Les conteneurs sont construits grâce à un dépôt qui provient d'une archive .tar.gz. Cette archive est une machine virtuelle Centos.quitté avec le code 0 docker

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 tag.

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 pas prêter attention à la commande comme je viens de préciser un.

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

Nous vous remercions de vos réponses.

+3

Vous dites ne pas faire attention à la commande mais la commande est importante dans ce cas, le conteneur vivra aussi longtemps que la commande le fera. –

Répondre

7

La réponse est en fait le premier commentaire. Je vais expliquer le commentaire de Miguel un peu. D'abord, nous devons comprendre qu'un conteneur Docker exécute une seule commande. Le conteneur sera exécuté tant que le processus démarré est en cours. Une fois le processus terminé et quitte, le conteneur s'arrête. Avec cette compréhension, nous pouvons faire une supposition 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 terminé (avec l'état 0, indiquant que mkdir s'est terminé sans erreur).

+0

-1 puisque vous n'avez pas donné une bonne solution, seulement une explication en soi comme dans le commentaire. Mettez à jour la réponse avec une solution possible et je vais changer d'avis. – sensation

+0

Cette réponse est parfaitement raisonnable et décrit avec précision le problème. La commande mkdir se termine tout de suite, succès ou échec, provoquant la sortie immédiate du conteneur.La solution est de ne pas utiliser mkdir comme point d'entrée, ce qui peut être accompli de différentes manières en fonction du cas d'utilisation. – Mike

1

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

C'est vraiment un hack cependant. Je suis toujours à la recherche d'une meilleure solution.

L'image Zend Server ressemble à ceci. Dans leur script .sh ils ont une dernière commande:

exec /usr/local/bin/nothing 

qui exécute un fichier qui fonctionne en permanence 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 de terminal dans le conteneur et l'empêche de se fermer.