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

Zwei Implementierungen des Front-End-Routings von Vue-Router

Inhaltsverzeichnis Modusparameter HashHistorie Ha...

So ändern Sie die SSH-Portnummer in der Centos8-Umgebung

Inhaltsverzeichnis Vorwort Start Vorwort Die Stan...

Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker

1. Übersicht Redis Cluster ermöglicht hohe Verfüg...

So verwenden Sie Makros in JavaScript

In Sprachen werden häufig Makros zur Implementier...

So testen Sie die Netzwerkgeschwindigkeit mit JavaScript

Inhaltsverzeichnis Vorwort Zusammenfassung des Pr...

Verwendung von VNode in Vue.js

Was ist VNode In vue.js gibt es eine VNode-Klasse...

Eine Sammlung möglicher Probleme bei der Migration von SQLite3 nach MySQL

Kurzbeschreibung Passend für Leser: Mobile Entwic...

Ändern Sie den Stil des HTML-Textkörpers in JS

Inhaltsverzeichnis 1. Ursprüngliche Definition 2....

So implementieren Sie Code und Schritte für den digitalen Paging-Effekt in CSS

Eine beträchtliche Anzahl von Websites verwendet d...