Heim > Betrieb und Instandhaltung > Docker > Wie Docker verhindert, dass der Container automatisch beendet wird

Wie Docker verhindert, dass der Container automatisch beendet wird

WBOY
Freigeben: 2022-03-08 10:40:21
Original
5742 Leute haben es durchsucht

In Docker können Sie dem Container einen residenten Front-End-Prozess hinzufügen, damit der Container nicht automatisch beendet wird. Sie können die interaktiven und tty-Parameter des Docker-Containers verwenden, um den Befehl „sh/bash“ als Potenzial zu aktivieren Befehl, damit der Container nicht automatisch beendet wird.

Wie Docker verhindert, dass der Container automatisch beendet wird

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Docker-1.13.1-Version, Dell G3-Computer.

Wie Docker verhindert, dass der Container automatisch beendet wird

Docker Der Lebenszyklus des Containers hängt mit dem Vorprozess im Container zusammen. Dies ist auch der Grund, warum wir möglicherweise auf einige Container stoßen, die nur wenige Sekunden lang ausgeführt werden und dann enden automatisch: weil Es gibt keinen residenten Front-End-Prozess im Container. Nachdem die Ausführung des Front-End-Prozesses abgeschlossen ist, wird der Container automatisch beendet.

Zum Beispiel Docker Hello-World

# 一闪而过 输出一堆东西
docker run --name hello-world hello-world
# 可以看到 hello-world 容器已经退出了
docker ps -a
Nach dem Login kopieren

Wie kann ich verhindern, dass der Container automatisch beendet wird? Wenn wir uns bei einem reinen Container wie alpine/centos/ubuntu anmelden möchten, installieren wir einige darauf basierende Servicekomponenten und übertragen sie dann in unser eigenes Image.

Es gibt viele Methoden im Internet, um eine while (echte) Endlosschleife auszuführen (natürlich eine Weile zu schlafen) oder tail -f /dev/null beim Erstellen eines Containers zu verwenden. Auf jeden Fall dient es dazu, eine permanente Front zu öffnen Legen Sie den Prozess als Zweck fest. Tatsächlich können wir die interaktiven und tty-Parameter des Docker-Containers eleganter verwenden, um den Befehl sh/bash (*nix-System muss vorhanden sein) als Vorbefehl zu öffnen, sodass der Container nicht automatisch beendet wird.

Verwenden Sie beispielsweise das Alpenbild als Basisbild, um einen kleinen Container für das Alpensystem zu erstellen, damit dieser dauerhaft ausgeführt werden kann, sodass wir uns anmelden und bestimmte Befehle interaktiv ausführen können.

# 使用 alpine 系统镜像创建容器
# -i interactive=true 开启 stdin
# -t tty=true 分配会话终端
# -d 守护模式 不加也可以 不加就直接进入容器中了 需要 ctrl+p+q 切出
# 不能 exit 哟, exit 相当于结束 sh 会话了 容器会退出的
docker run -it -d --name alpine alpine sh
# alpine 肯定在运行
docker ps
# 登入容器
docker exec -it alpine sh
# apline 使用的 apk 作为包管理
# 安装个小火车
# 后续可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl 生成新的镜像
apk add sl
# 退出容器 注:-d 启动的才可以,如果没有 -d 启动直接进入的 sh终端 则不能退出,否则容器也会退出
exit
Nach dem Login kopieren

Containeränderungen senden, um ein neues Image zu generieren

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有账号的话发布到 docker hub 上去
docker push big_cat/alpine_sl
# 后续停止/启动容器时就不需要在指定 -it 参数了
docker stop alpine
docker start alpine
Nach dem Login kopieren

Containeränderungen senden, um ein neues Image zu generieren

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有账号的话发布到 docker hub 上去
docker push big_cat/alpine_sl
Nach dem Login kopieren

Der obige Befehl verwendet tatsächlich das sh/bash-Sitzungsterminal als Vorprozess, sodass der Container nicht automatisch beendet wird .

Wenn Sie der Meinung sind, dass es grob ist, beim Erstellen eines Containers so zu schreiben, spielt das keine Rolle. Wir können diese an Docker-Compose weiterleiten , starten Sie den Dienstcontainer nach der Orchestrierung.

Empfohlenes Lernen: „

Docker-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie Docker verhindert, dass der Container automatisch beendet wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage