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

Beispielcode für Text-Origami-Effekt mit CSS3

Vorwort In diesem Artikel erfahren Sie hauptsächl...

Erläuterung der objektorientierten Klassenvererbung in JavaScript

1. Objektorientierte Klassenvererbung In den obig...

Detaillierte Erklärung des Linux-Befehls unzip

Inhaltsverzeichnis 1. Unzip-Befehl 1.1 Syntax 1.2...

Implementierungsideen für die Synchronisierung von Docker-Registry-Images

Einleitung Bisher wurden unsere Docker-Images in ...

Soll die Like-Funktion MySQL oder Redis verwenden?

Inhaltsverzeichnis 1. Häufige Fehler von Anfänger...

So erstellen Sie ein responsives Säulendiagramm mit dem CSS-Rasterlayout

Ich spiele jetzt schon eine Weile mit Diagrammen ...

React implementiert doppelten Schieberegler zum Querschieben

In diesem Artikel wird der spezifische Code für R...

Vue implementiert die Internationalisierung der Sprachumschaltung für Webseiten

1. Grundlegende Schritte 1: Installieren Sie yarn...

Analyse des Sperrmechanismus der MySQL-Datenbank

Bei gleichzeitigen Zugriffen kann es zu nicht wie...

Implementierung einfacher Tabs mit js

Tab-Auswahlkarten werden auf echten Webseiten seh...

Tutorial zum binären Suchbaumalgorithmus für JavaScript-Anfänger

Inhaltsverzeichnis Was ist ein binärer Suchbaum (...

Einführung in die Verwendung von CSS3-Farbwerten (RGBA) und Farbverlaufsfarben

Vor CSS3 konnten Verlaufsbilder nur als Hintergru...