Eine kurze Erläuterung, warum Daemon Off beim Ausführen von Nginx in Docker verwendet wird

Eine kurze Erläuterung, warum Daemon Off beim Ausführen von Nginx in Docker verwendet wird

Ich bin sehr glücklich. Wenn ich auf dieses Problem stoße, muss ich über das Prozessprinzip des Docker-Containers sprechen. Grundsätzlich sind sich Leute, die Docker kennen, mehrerer Isolationsmethoden von Docker bewusst, und der Prozess ist auch isoliert.

Frage

1. Warum stürzt der Docker-Container während der Ausführung ab?

Standardmäßig verwendet der Docker-Container den ersten Prozess im Container, also das Programm mit PID = 1, als Grundlage dafür, ob der Docker-Container ausgeführt wird. Wenn die PID des Docker-Containers 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 das nginx-Programm im Hintergrund ausgeführt. Zu diesem Zeitpunkt ist nginx kein Programm mit PID 1, sondern Bash wird ausgeführt. Diese Bash bleibt nach der Ausführung des nginx-Befehls hängen, sodass der Container ebenfalls beendet wird. Der gleiche Grund gilt für Sie. Nach dem Start von pm2 ist die PID von Bash 1. Zu diesem Zeitpunkt wird Bash nach der Ausführung beendet, sodass der Container ebenfalls beendet wird.

Im Folgenden erkläre ich Ihnen anhand von Beispielen, warum wir das tun! !

Touch-Datei get_pid

echo "PID dieses Skripts: $$"
echo "PPID dieses Skripts: $PPID"
echo "UID dieses Skripts: $UID"
#nginx -g 'Daemon aus;'

An diesem Punkt starten wir den Container, um diese sh-Datei auszuführen

odtoy:~ zhaojunlike$ eval `docker-machine env default`
godtoy:~ zhaojunlike$ cd Arbeitsbereich/
godtoy:WorkSpace zhaojunlike$ ls
Docker NodeJS PHP PID_GET
godtoy:Arbeitsbereich zhaojunlike$ vim pid_get 
godtoy:Arbeitsbereich zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get
PID dieses Skripts: 1
PPID dieses Skripts: 0
UID dieses Skripts: 0
godtoy:Arbeitsbereich zhaojunlike$

Nachdem der Container pid_get ausgeführt hat, wird er automatisch beendet. Zu diesem Zeitpunkt wird die PID der aktuellen Bash-Ausführung als 1 ausgegeben.

Wenn wir also nicht möchten, dass der Container abstürzt, ist die Ausführung ohne Daemon ein Muss. Natürlich können wir auch innerhalb eines Containers ausführen.

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

Wir verwenden den Parameter -it, um eine Verbindung mit der Pipeline innerhalb des Containers herzustellen, und dann verwenden wir den Befehl nginx innerhalb des Containers. Schließlich wird der Container Ctrl+P+Q noch ausgeführt, nachdem Sie ihn verlassen haben.

Zusammenfassen

Wenn Sie Node in Docker verwenden müssen, müssen Sie keine Tools wie pm2 installieren. Führen Sie Node einfach direkt aus. Wenn Sie befürchten, dass Ihr Container abstürzt, können Sie Neustart und andere zugehörige Parameter hinzufügen, z. B. ` docker run .... --restart=always

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So konfigurieren Sie nginx+php+mysql in Docker
  • Lösung für ungültige Nginx-Cross-Domain-Einstellung Access-Control-Allow-Origin
  • Beispielmethode zum Bereitstellen eines React-Projekts auf Nginx
  • Verwenden Sie das Tool nginx.vim zur Syntaxhervorhebung und Formatierung der Konfigurationsdatei nginx.conf
  • Detaillierte Erläuterung der Fallstricke von add_header im Nginx-Konfigurationstutorial
  • So konfigurieren Sie die bidirektionale Zertifikatsüberprüfung auf dem Nginx-Proxyserver
  • Lösung für das Problem des Informationsverlusts mit "_" im Header bei Verwendung des Nginx-Proxys
  • Shell-Skript Nginx-Automatisierungsskript
  • So erstellen Sie einen Nginx-Server mit Docker
  • Einführung in das Batch-Cache-Löschskript von nginx proxy_cache

<<:  React verwendet Routing, um zur Anmeldeoberfläche umzuleiten

>>:  So implementieren Sie das MySQL-Umschalten des Datenspeicherverzeichnisses

Artikel empfehlen

Vue-Formulareingabebindung V-Modell

Inhaltsverzeichnis 1.v-Modell 2. Bindungseigensch...

Detaillierte Erklärung der Entwurfsmuster des JavaScript-Frameworks

Inhaltsverzeichnis mvc MVP mvv Die Quelle von Vue...

So verwenden Sie den VIM-Editor unter Linux

Als leistungsstarker Editor mit umfangreichen Opt...

So zeigen Sie Webseiten in verschiedenen Auflösungen und Browsern richtig an

Die Schlüsselcodes lauten wie folgt: Code kopieren...

Mysql kann keine nicht aggregierten Spalten auswählen

1. Einleitung Ich habe mein Blog kürzlich aktuali...

So installieren und verwenden Sie Server-U Version 14

Einführung der Server-U-Software Server-U ist ein...

Beispiel für das Erstellen eines virtuellen Hosts basierend auf dem Apache-Port

Apache: Virtuellen Host basierend auf Port erstel...

So zeigen Sie das MySQL-Binlog (Binärprotokoll) an

Wenn Sie beispielsweise eine neue Tabelle erstell...

Vor- und Nachteile des Tabellenlayouts und warum es nicht empfohlen wird

Nachteile von Tabellen 1. Tabellen nehmen mehr Byt...

SQL-Implementierung von LeetCode (181. Angestellte verdienen mehr als Manager)

[LeetCode] 181.Mitarbeiter verdienen mehr als ihr...

Zusammenfassung einiger Vorschläge zum HTML-Code-Schreibstil

Das Protokoll der Ressourcendatei weglassen Es wi...