Heim >Betrieb und Instandhaltung >Nginx >Was ist der Grund, warum Docker beim Ausführen von Nginx den Daemon deaktiviert?

Was ist der Grund, warum Docker beim Ausführen von Nginx den Daemon deaktiviert?

PHPz
PHPznach vorne
2023-06-02 19:32:133692Durchsuche

Fragen

1. Warum bleibt der Docker-Container hängen, wenn er ausgeführt wird?

Der Docker-Container verwendet standardmäßig den ersten Prozess im Container, also das Programm mit pid=1, als Grundlage dafür, ob der Docker-Container läuft. Wenn die Docker-Container-PID hängt, wird der Docker-Container direkt beendet .

2. Wenn Docker ausgeführt wird, verwenden Sie den Befehl als internen Befehl des Containers. Wenn Sie Nginx verwenden, wird Nginx zu diesem Zeitpunkt nicht als Programm mit PID 1 ausgeführt . Diese Bash führt die Nginx-Anweisung aus, sodass der Container ebenfalls beendet wird. Nach dem Start von pm2 ist die Bash 1 und wird nach der Ausführung beendet.

Im Folgenden werde ich anhand von Beispielen erklären, warum wir das tun! !

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

Zu diesem Zeitpunkt starten wir den Container, um diese SH-Datei auszuführen🎜rrreee🎜Nachdem der Container pid_get ausgeführt hat, wird der Container automatisch beendet. Zu diesem Zeitpunkt ist der aktuelle Wert gedruckt Die PID der laufenden Bash ist 1. 🎜🎜Wenn wir also verhindern wollen, dass der Container hängen bleibt, ist eine Nicht-Daemon-Ausführung ein Muss. Natürlich können wir ihn auch innerhalb eines Containers ausführen🎜rrreee🎜Wir verwenden den Parameter -it, um eine Verbindung zur Pipe innerhalb des Containers herzustellen . Dann verwenden wir Nginx-Befehle innerhalb des Containers. Nachdem Strg+P+Q schließlich den Container verlassen hat, läuft der Container noch. 🎜

Das obige ist der detaillierte Inhalt vonWas ist der Grund, warum Docker beim Ausführen von Nginx den Daemon deaktiviert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen