[踩雷紀錄] Docker container 背景執行 tty 類的程式

[踩雷紀錄] Docker container 背景執行 tty 類的程式

2021, Feb 24    

最近在部屬包裝在 Karaf 的產品的時候遇到的問題,不管怎麼包 container 都無法正常啟動,記錄一下踩雷的經驗

Container 運行機制

Docker 的 container 啟動時會執行一個程式或是指令,而當指令執行完畢之後便會結束 container,而程式的結束判斷依據似乎是是否進入 TTY 模式,也就是自由輸入指令的 terminal mode

因此像是 Karaf 這種執行後會開啟一個終端的程式,在初始化完之後,進入終端操作介面,但我們需要的其實是在背景執行中的 feature

Alt

當時感到疑惑的地方就是當用,下面指令執行的時候一切正常

docker run -it <image>

但是換成下面背景執行就怎麼都跑不起來

docker run -d <image>

解法

解法其實也簡單暴力,把 karaf 丟到背景執行,然後無限 sleep

CMD ./karaf &;sleep infinity

不過 karaf 其實有自帶背景執行的執行擋,可以直接

CMD ./start;sleep infinity

或是寫成一個 shell script,直接執行 shell script 就好