Automatiquement Démarrer les Services dans le Panneau de Conteneur
Je suis en train de faire quelques tests avec docker. Au moment où j'ai mes images et je peux mettre certains conteneurs en cours d'exécution, avec:
docker ps
Je ne docker attach container_id
et démarrer les services d'apache2.
Puis, à partir de la console principale, j'ai commis le conteneur de l'image.
Après la sortie du conteneur, si j'essaie de démarrer le conteneur ou essayez de lancer un nouveau conteneur de l'engagement de l'image, le service est toujours arrêté.
Comment pouvez créer ou de redémarrer un conteneur avec les services, par exemple apache?
OriginalL'auteur Pedro | 2013-08-04
Vous devez vous connecter pour publier un commentaire.
EDIT:
J'ai appris beaucoup de choses sur Docker depuis l'origine de l'affichage de cette réponse. "Démarrage des services automatiquement dans des conteneurs Docker" n'est pas un bon modèle d'utilisation de Docker. Au lieu de cela, utilisez quelque chose comme la flotte, Kubernetes, ou même Monit/SystemD/Upstart/Init.d/Cron pour lancer automatiquement les services qui s'exécutent à l'intérieur de conteneurs Docker.
RÉPONSE ORIGINALE À CETTE QUESTION:
Si vous démarrez le conteneur avec la commande
/bin/bash
, alors vous pouvez faire cela de la manière décrite ici: https://stackoverflow.com/a/19872810/2971199Donc, si vous êtes de départ du conteneur avec
docker run -i -t IMAGE /bin/bash
et si vous souhaitez démarrer automatiquement apache2 lorsque le conteneur est commencé, modifier/etc/bash.bashrc
dans le récipient et ajouter/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf
(ou quel que soit votre apache2 commande de démarrage) pour un retour à la ligne à la fin du fichier.Enregistrer les modifications apportées à votre image et de le redémarrer avec
docker run -i -t IMAGE /bin/bash
et vous trouverez apache2 en cours d'exécution lorsque vous fixez./etc/bash.bashrc
sera exécuté sur chaque bash de démarrage qui pourraient causer des problèmes si plus tard vous souhaitez interagir avec le conteneur (par exemple, l'exécutiondocker exec -ti ID bash
) ... je pense que ce n'est pas le bon endroit pour mettre des scripts de démarrage pour les services comme la apache2Convenu Petr. J'ai appris sur le menu fixe depuis que j'ai posté cette réponse, et pendant qu'il fonctionne, il n'est pas du tout la façon dont nous utilisons en fait Docker dans la vraie vie.
Pourquoi ne pas
docker run -i -t IMAGE /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf
qu'est-ce que bash?vbence, il semble que vous n'avez pas lu les commentaires juste au-dessus de la vôtre et mes MODIFIER à ma réponse? Oui, ce que vous avez mentionné est un plus bonne façon, mais cette réponse est d'avant j'ai appris plus sur la conteneurisation et l'initialisation du processus, comme l'a démontré mon montage. C'est aussi à partir avant de Docker ajouté processus d'injection avec "docker exec ..." - donc, à l'époque, nous avions peu de moyens pour interagir avec ou dépanner un conteneur sans bash est en cours.
OriginalL'auteur damick
Une option que vous pouvez utiliser serait d'utiliser un gestionnaire de processus tels que Supervisord à l'exécution de plusieurs processus. Quelqu'un a accompli cela avec sshd et mongodb: https://github.com/justone/docker-mongodb
OriginalL'auteur bacongobbler
Je suppose que vous ne pouvez pas. Ce que vous pouvez faire est de créer une image en utilisant un Dockerfile et de définir un CMD dans, qui sera exécuté lorsque le conteneur commence. Voir le générateur de documentation pour les bases (https://docs.docker.com/reference/builder/) et de voir Exécuter un service automatiquement dans un conteneur docker pour plus d'informations sur le maintien de votre service en cours d'exécution.
Vous n'avez pas besoin d'automatiser ce à l'aide d'un Dockerfile. Vous pouvez également créer l'image par l'intermédiaire d'un manuel de commettre comme vous le faites, et de l'exécuter en ligne de commande. Ensuite, vous offre la commande qu'il doit s'exécuter (ce qui est exactement ce que le Dockerfile CMD en fait). Vous pouvez également remplacer les Dockerfiles CMD dans ce sens: seule la dernière CMD sera exécuté, qui est la ligne de commande si vous démarrez le conteneur à l'aide de l'un. La base
docker run -i -t base /bin/bash
de commande de la documentation en est un exemple. Si votre commande est trop longue, vous pouvez créer une commodité script de cours.OriginalL'auteur qkrijger
De par leur conception, les conteneurs commencé en mode détaché de sortie lorsque le processus racine utilisé pour exécuter le conteneur des sorties.
Vous avez besoin pour démarrer un service Apache en mode de premier plan.
Référence: https://docs.docker.com/engine/reference/run/#detached-vs-foreground
OriginalL'auteur Rodrigo Lima