濮阳杆衣贸易有限公司

主頁 > 知識庫 > 詳解docker 容器不自動退出結束運行的方法

詳解docker 容器不自動退出結束運行的方法

熱門標簽:coreldraw地圖標注 菏澤crm外呼系統(tǒng)價格 申請400電話號碼多少錢 物超所值的400電話申請 百應電銷機器人靠譜嗎 遼寧電銷平臺外呼系統(tǒng)軟件 如何在各種地圖標注自己的地址 營銷電銷機器人招商 信陽銷售外呼系統(tǒng)招商

本文主要簡單介紹 docker 容器與前置進程的關系,以及如何編寫 Dockerfile/docker-compose.yml 優(yōu)雅的讓容器可以常駐運行。

docker 容器的生命周期是同容器中的前置進程相關在一起的,這也是我們平時可能會遇到一些容器只是運行幾秒便自動結束的原因:因為容器中沒有一個常駐的前置進程,前置進程運行結束后,容器便自動退出了。

比如 docker hello-world

# 一閃而過 輸出一堆東西
docker run --name hello-world hello-world
# 可以看到 hello-world 容器已經退出了
docker ps -a

那怎樣可以讓容器不自動退出呢?如果我們想登入一個純凈的容器 alpine/centos/ubuntu 之類的,在其基礎上安裝一些服務組件,然后在 commit 成自己的鏡像。

看網上有不少方法是創(chuàng)建容器時執(zhí)行一個 while(true) 的死循環(huán)(當然,sleep 一下)或者用 tail -f /dev/null 一類的,反正就是以開啟一個可以常駐的前置進程為目的。其實我們可以更優(yōu)雅的使用 docker 容器的 interactive 和 tty 參數來將 sh/bash (*nix 系統(tǒng)必有)命令作為前置命令開啟,這樣容器就不會自動退出了。

例如使用 alpine 鏡像做為基礎鏡像,創(chuàng)建一個 alpine 系統(tǒng)小容器,讓其可以常駐運行,以便我們登錄交互執(zhí)行某些命令。

# 使用 alpine 系統(tǒng)鏡像創(chuàng)建容器
# -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 作為包管理
# 安裝個小火車
# 后續(xù)可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl 生成新的鏡像
apk add sl
# 退出容器 注:-d 啟動的才可以,如果沒有 -d 啟動直接進入的 sh終端 則不能退出,否則容器也會退出
exit

提交容器變更生成新的鏡像

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有賬號的話發(fā)布到 docker hub 上去
docker push big_cat/alpine_sl

# 后續(xù)停止/啟動容器時就不需要在指定 -it 參數了
docker stop alpine
docker start alpine

提交容器變更生成新的鏡像

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有賬號的話發(fā)布到 docker hub 上去
docker push big_cat/alpine_sl

以上命令其實是借助 sh/bash 會話終端作為前置進程,使得容器不會自動退出。

如果你覺得在創(chuàng)建容器時如此書寫會很粗陋,沒關系,我們可以將這些都推給 docker-compose
docker-compose.yml

version: '3'

services:
  big_cat_alpine:
    container_name: big_cat_alpine
    image: alpine
    stdin_open: true # -i interactive
    tty: true # -t tty
    privileged: true
    entrypoint: ["sh"] # 執(zhí)行 sh

創(chuàng)建容器 & 登入容器

docker-compose up -d big_cat_alpine ./
docker ps
docker exec -it big_cat_alpine sh

通過 docker-compose 將那兩個參數傳入進去,編排后啟動服務容器。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:瀘州 江西 江門 泰安 玉樹 廈門 湖北 內江

巨人網絡通訊聲明:本文標題《詳解docker 容器不自動退出結束運行的方法》,本文關鍵詞  詳解,docker,容器,不,自動,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解docker 容器不自動退出結束運行的方法》相關的同類信息!
  • 本頁收集關于詳解docker 容器不自動退出結束運行的方法的相關信息資訊供網民參考!
  • 推薦文章
    长岛县| 潢川县| 辽源市| 普兰县| 东乡| 英吉沙县| 铜鼓县| 松原市| 西贡区| 邮箱| 文水县| 恭城| 登封市| 太保市| 周宁县| 渭南市| 环江| 彰武县| 宜都市| 边坝县| 台东市| 江阴市| 沅江市| 西峡县| 乐业县| 唐海县| 太湖县| 朝阳县| 垦利县| 濉溪县| 朝阳区| 中宁县| 景谷| 叙永县| 宁陵县| 逊克县| 杭锦旗| 榕江县| 清河县| 连云港市| 田东县|