docker容器保持執行不退出

2021-09-10 01:55:41 字數 1851 閱讀 4060

nsenter工具進入docker容器

概述對於執行在後台的docker容器,我們經常需要做的事情是進入到容器中,docker為我們提供了docker exec 、docker attach 命令,並且還提供了nsenter工具,外部工具供我們使用。docker attach存在的問題是:當多個視窗同時attach到同乙個容器時,所有的視窗都會同步的顯示,假如其中的乙個視窗發生阻塞時,其它的視窗也會阻塞,docker attach命令可以說是最不方便的進入後台docker容器的方法。docker exec命令是在docker 1.3之後增加的乙個比docker attach命令更加方便的命令。和docker exec差不多方便的命令是nsenter工具。

nsenter安裝

$ cd /tmp;

$ curl | tar -zxf-; cd util-linux-2.24;

$ ./configure  --without-ncurses

$ make nsenter && sudo cp nsenter /usr/local/bin

nsenter使用

在使用nsenter命令之前需要獲取到docker容器的程序,然後再使用nsenter工具進去到docker容器中,具體的使用方法如下:

$ docker inspect -f } 容器名或者容器id   #每乙個容器都有.state.pid,所以這個命令除了容器的id需要我們根據docker ps -a去查詢,其他的全部為固定的格式

$ nsenter --target 上面查到的程序id --mount --uts --ipc --net --pid  #輸入該命令便進入到容器中

解釋nsenter指令中程序id之後的引數的含義: 

* –mount引數是進去到mount namespace中 

* –uts引數是進入到uts namespace中 

* –ipc引數是進入到system v ipc namaspace中 

* –net引數是進入到network namespace中 

* –pid引數是進入到pid namespace中 

* –user引數是進入到user namespace中

在linux中,最愛簡單的檢視指定命令引數含義的辦法是在終端中輸入:

$ nsenter --help  #會回顯所有與該命令有關的引數

$ man nsenter  #能查到更加詳細的使用示例和引數說明

現象啟動docker容器 

docker run –name [container_name] [container_id] 

檢視容器執行狀態 

docker ps -a 

發現剛剛啟動的mydocker容器已經退出

原因docker容器的主線程(dockfile中cmd執行的命令)結束,容器會退出

辦法可以使用互動式啟動

docker run -i [container_name or container_id]

上面的不太友好,建議使用後台模式和tty選項

docker run -dit [container_name or container_id]

檢視容器狀態

docker ps -a

docker調出後台容器

docker attach [container_name or container_id]

tips:退出時,使用[ctrl + d],這樣會結束docker當前執行緒,容器結束,可以使用[ctrl + p][ctrl + q]退出而不終止容器執行

如下命令,會在指定容器中執行指定命令,[ctrl+d]退出後不會終止容器執行

docker exec -it [container_name or container_id] /bin/bash

Casperjs迴圈執行(重複執行不退出)

我們知道,casperjs執行任務的時候最終是要退出的。那麼如何讓它 隔一段時間 重複的執行乙個相同的行為呢。如果你按我們平時的js迴圈思維去寫,你肯定會失敗,達不到預期的效果。參考寫法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22...

SSH客戶端保持不退出的方法

ssh工具登centos rhel總是出現一段時間不操作就自動登出的情況,不利於工作。查網上資料共兩種辦法。實測好用 修改 etc ssh sshd config中兩個配置,大約是112行位置 刪除注釋符號,並修改引數 clientaliveinterval 30 每30秒伺服器向客戶端發起一次心跳...

ssh遠端執行nohup命令不退出

linux系統下,使用預設使用者root。遠端target機器的主目錄下有個指令碼test.sh,可執行許可權,內容只有一條命令 sleep 10 在本地機器上執行 ssh target nohup test.sh 結果ssh不立即退出,等test.sh執行完畢之後才退出。一般我們使用nohup命令...