Führen Sie Container mit Docker kontinuierlich im Hintergrund aus

Führen Sie Container mit Docker kontinuierlich im Hintergrund aus

Docker beendet automatisch einen Container, wenn es im Hintergrund ausgeführt wird; Es wird jedoch bestimmte Fälle geben, in denen wir sicherstellen müssen, dass die Instanz trotz Abschluss des Prozesses weiter ausgeführt wird. In diesem Artikel wird erläutert, wie wir Docker-Container weiterhin im Hintergrund ausführen können.

Führen Sie Docker-Container im Hintergrund aus

Wenn wir das Ausführen von Containern vereinfachen möchten, sollten wir unseren Container im Hintergrund wie folgt ausführen:

docker run -d image sample

Anstatt mit dem folgenden zu laufen:

docker run -i -t image sample

Die Verwendung von -d wird empfohlen, da wir unseren Container mit nur einem Befehl ausführen können und wir das Terminal des Containers nicht durch Drücken von Strg+P + < trennen müssen kbd>Q.

Es gibt jedoch ein Problem mit dem Parameter -d. Infolgedessen stoppt unser Container sofort, es sei denn, die Befehle werden nicht im Vordergrund ausgeführt.

Lassen Sie uns dies anhand eines Falls erläutern, in dem wir einen Apache-Dienst auf einem Container ausführen möchten. Der intuitive Weg, dies zu tun, ist:

docker run -d apache-server apachectl start

Der gestartete Container stoppt jedoch sofort, da apachectl beendet wird, sobald es den Apache-Daemon trennt.

Docker mag das nicht. Docker benötigt unseren Befehl, um im Vordergrund weiter ausgeführt zu werden; andernfalls denkt es, dass unsere Anwendung stoppt und den Container herunterfährt.

Container im Vordergrund ausführen

Wir können dies lösen, indem wir die ausführbare Apache-Datei direkt mit der Vordergrundoption ausführen.

docker run -d apache-server /usr/sbin/apache2 -D NO_DETACH -D FOREGROUND

Hier tun wir manuell, was apachectl für uns erledigt, und führen die ausführbare Apache-Datei aus. Bei diesem Ansatz läuft Apache im Vordergrund weiter.

Denken Sie auch hier daran, dass der Prozess für jedes Unix-basierte Image unterschiedlich ist.

Das Problem ist, dass einige Anwendungen nicht im Vordergrund ausgeführt werden. Außerdem müssen wir zusätzliche Arbeit leisten, z. B. das Exportieren von Umgebungsvariablen selbst.

In dieser Situation können wir Ihrem Befehl tail -f /dev/null hinzufügen. Unser Container bleibt nicht stehen, weil der tail im Vordergrund weiterläuft.

Wir können diese Technik in unserem vorherigen Fall verwenden.

docker run -d apache-server apachectl start && tail -f /dev/null

Da uns tail -f /dev/null nicht schadet, können wir diesen Workaround für beliebige Anwendungen nutzen.

Betreiben Sie Container auf unbestimmte Zeit

Eine weitere einfache Möglichkeit, einen Container unbegrenzt im Daemon-Modus -d am Leben zu erhalten, besteht darin, sleep infinity als Argument des Containers auszuführen. Dies ist unabhängig von der Durchführung ungewöhnlicher Aktionen wie der Zuweisung eines TTY im Daemon-Modus.

Obwohl der Befehl eigenartig ist, wie z. B. sleep zu Ihrem Standardbefehl zu machen.

docker run -d apache-server sleep infinity

Auch der Parameter -t weist ein pseudo-tty zu und sollte auch funktionieren. Dies manipuliert bash so, dass es weiter läuft, weil es denkt, dass es mit einem interaktiven TTY verbunden ist.

docker run -t -d apache-server
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Verwandter Artikel - Docker Container