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.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Docker-1.13.1-Version, Dell G3-Computer.
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
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
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
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
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!