Maison >Opération et maintenance >Nginx >Quelle est la raison pour laquelle Docker utilise Daemon Off lors de l'exécution de Nginx ?

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

PHPz
PHPzavant
2023-06-02 19:32:133692parcourir

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;'

此时我们启动容器去执行这个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$

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

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

godtoy:workspace zhaojunlike$ docker run -it nginx bash
root@a8baa5fe77f0:/# nginx
root@a8baa5fe77f0:/# godtoy:workspace zhaojunlike$

我们使用-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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer