簡體   English   中英

在流程執行后以分離模式啟動的Docker容器停止

[英]docker container started in Detached mode stopped after process execution

我使用以下命令以分離模式創建我的Docker容器:

docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh"

所以我需要在創建的容器上執行“ /opt/init.sh”。 我看到的是,腳本執行完后容器已停止。

如何在創建容器時通過腳本/服務執行來使容器保持啟動狀態?

有兩種運行docker容器的模式

  1. 分離模式-此模式下您將執行命令,並在命令完成后終止容器
  2. 前景模式-此模式運行bash shell,但在退出shell后也會終止容器

您需要的是背景模式。 這在參數中沒有給出,但是有很多方法可以做到這一點。

  1. 在分離模式下運行無限命令,因此該命令永不結束,並且容器永不停止。 我通常使用“ tail -f / dev / null”只是因為它的重量很輕並且大多數Linux映像中都存在/ dev / null。

docker run -d --name =名稱容器尾巴-f / dev / null

然后,您可以像這樣撲向正在運行的容器:

docker exec -it名稱/ bin / bash -l

如果使用-l參數,它將以登錄方式登錄,該方式將像普通的bash登錄一樣執行.bashrc。 否則,您需要手動重新進行內部打擊

  1. 入口點-您可以創建任何sh腳本,例如/entrypoint.sh。 在entrypoint.sh中,您也可以運行任何永無止境的腳本

#!/ bin / sh

#/ entrypoint.sh

服務mysql重啟

...

tail -f / dev / null <-這永遠不會結束

保存該entrypoint.sh后,在其上執行chmod a + x,退出docker bash,然后按以下方式啟動它:

docker運行--name = name容器--entrypoint /entrypoint.sh

這允許每個容器都有自己的啟動腳本,您可以運行它們而不必擔心每次都附加啟動腳本

Docker容器的主進程結束時將退出。 在這種情況下,這意味着init.sh結束。 如果僅嘗試啟動單個應用程序,則可以只在最后使用exec來啟動它,並確保在前台運行它。 使用exec將有效地將被調用的服務/應用程序轉換為主過程。

如果您要啟動一項以上的服務,則最好使用流程管理器(例如supervisordrunit 您將需要在前台啟動流程管理器守護程序。 Docker文檔包含一個使用超級用戶的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM