Maison > Opération et maintenance > Nginx > le corps du texte

Quelle est la raison pour laquelle Docker utilise Daemon Off lors de l'exécution de Nginx ?

PHPz
Libérer: 2023-06-02 19:32:13
avant
3599 Les gens l'ont consulté

Questions

1. Pourquoi le conteneur Docker se bloque-t-il lorsqu'il est en cours d'exécution ?

Le conteneur Docker utilisera par défaut le premier processus à l'intérieur du conteneur, c'est-à-dire le programme avec pid=1, comme base pour savoir si le conteneur Docker est en cours d'exécution. Si le pid du conteneur Docker se bloque, le conteneur Docker se fermera directement. .

2. Lorsque docker s'exécute, utilisez command comme commande interne du conteneur. Si vous utilisez nginx, alors le programme nginx s'exécutera en arrière-plan. À ce stade, nginx n'est pas le programme avec le pid 1, mais le bash exécuté. . Ce bash exécute l'instruction nginx. Ensuite, il se bloque, donc le conteneur se ferme également pour la même raison que le vôtre, après le démarrage de pm2, le pid de bash est 1, puis bash se fermera après l'exécution, donc le conteneur se fermera également.

Ci-dessous, j'utiliserai des exemples pour expliquer pourquoi nous faisons cela ! !

touch file get_pidget_pid

echo "pid of this script: $$"
echo "ppid of this script: $ppid"
echo "uid of this script: $uid"
#nginx -g 'daemon off;'
Copier après la connexion

此时我们启动容器去执行这个sh文件

odtoy:~ zhaojunlike$ eval `docker-machine env default`
godtoy:~ zhaojunlike$ cd workspace/
godtoy:workspace zhaojunlike$ ls
docker  nodejs  php  pid_get
godtoy:workspace zhaojunlike$ vim pid_get 
godtoy:workspace zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get
pid of this script: 1
ppid of this script: 0
uid of this script: 0
godtoy:workspace zhaojunlike$
Copier après la connexion

在容器执行完pid_get 后,容器也就自动退出了,这个时候,打印出了当前的bash运行的pid是1。

所以,如果我们想让容器不挂掉,那么非守护进行的执行是必须得,当然下面也能去让一个容器内部,执行

godtoy:workspace zhaojunlike$ docker run -it nginx bash
root@a8baa5fe77f0:/# nginx
root@a8baa5fe77f0:/# godtoy:workspace zhaojunlike$
Copier après la connexion

我们使用-it参数可以连接到容器内部的管道,然后我们在容器内部使用nginx命令。最后ctrl+p+qrrreee

À ce moment, nous démarrons le conteneur pour exécuter ce fichier sh🎜rrreee🎜Après l'exécution de pid_get, le conteneur se ferme automatiquement. À ce moment, la valeur actuelle est. imprimé Le pid de l'exécution de bash est 1. 🎜🎜Donc, si nous voulons empêcher le conteneur de se bloquer, une exécution sans démon est indispensable. Bien sûr, nous pouvons également l'exécuter à l'intérieur d'un conteneur🎜rrreee🎜Nous utilisons le paramètre -it pour nous connecter au tuyau à l'intérieur du conteneur. . Ensuite, nous utilisons les commandes nginx à l'intérieur du conteneur. Enfin, après que ctrl+p+q ait quitté le conteneur, celui-ci est toujours en cours d'exécution. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!