在沒有 docker 容器的時候,在終端(terminal)中運行 shell 命令,我們知道當終端退出時(比如關閉終端窗口或退出 ssh 會話),終端中執行的命令也會結束。所以,當我們在終端中執行持續運行的任務或服務時,我們需要讓其跳出當前 shell 進程,在后台運行(比如以 daemon 方式運行)。
在最近剛接觸 docker 容器時,我誤以為 docker 容器是一個輕量級的虛擬機(vm),容器啟動后,只要我不把容器關閉,可以在其中任意執行 shell 命令,想干啥就干啥。於是,遇到了容器啟動后自動退出的問題,比如:如何讓docker容器在執行shell命令后不退出運行。
后來明白了,docker 容器不是一個輕量級的虛擬機(vm),而是一個輕量級的終端(terminal):
1)它是一個只給你一次機會運行 shell 命令的終端
2)它是一個與其中運行的 shell 命令共存亡的終端(命令結束容器退出,命令運行容器運行)。
如果一個容器啟動后不運行任何 shell 命令怎么辦,可以通過 docker run -t 命令或 docker compose 文件中的 tty: true 配置解決。
如果一個容器啟動后其中運行的 shell 命令會結束怎么辦,想盡一切辦法不讓 shell 命令結束。