国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

強(qiáng)制異常容器重啟,讓你的Docker錦上添花

這篇具有很好參考價(jià)值的文章主要介紹了強(qiáng)制異常容器重啟,讓你的Docker錦上添花。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

docker compose 配置 unhealthy的時(shí)候自動(dòng)重啟,docker,eureka,容器,運(yùn)維,云原生

在沒(méi)有HEALTHCHECK指令之前,Docker只能通過(guò)process是否退出來(lái)判斷container的狀態(tài),不過(guò)有時(shí)候服務(wù)已經(jīng)無(wú)法正常運(yùn)作了,但process沒(méi)有退出,這樣會(huì)導(dǎo)致該服務(wù)仍然可以接收用戶請(qǐng)求,但是無(wú)法正常響應(yīng)。我們需要對(duì)這種容器進(jìn)行識(shí)別并自動(dòng)重啟。

今天我們接著上次的docker健康檢查機(jī)制那篇文章,講述一下如何給不健康的容器進(jìn)行重啟。新近關(guān)注的用戶可以點(diǎn)擊后面的鏈接查看如何添加健康檢查機(jī)制,巧用Docker健康檢查,讓你的容器如虎添翼。另外有讀者反饋有幾個(gè)參數(shù)不是很理解,我們會(huì)在這篇文章里再補(bǔ)充講解一下。

Docker在1.12版本之后提供了HEALTHCHECK指令,可以設(shè)定一行command用來(lái)判斷服務(wù)的狀態(tài)是否正常,這樣可以更準(zhǔn)確地判斷服務(wù)狀態(tài)。

HEALTHCHECK Container啟動(dòng)后的初始狀態(tài)為starting,在指令檢查成功后,狀態(tài)會(huì)更改為healthy,如果連續(xù)失敗超過(guò)指定次數(shù)則會(huì)改為unhealthy??聪翲ealthCheck的工作機(jī)制。

docker compose 配置 unhealthy的時(shí)候自動(dòng)重啟,docker,eureka,容器,運(yùn)維,云原生

HEALTHCHECK參數(shù)選項(xiàng):

--interval: Health check時(shí)間間隔,預(yù)設(shè)為30秒

--timeout:當(dāng)Health check超過(guò)此設(shè)定的時(shí)間,則會(huì)視為失敗,預(yù)設(shè)為30秒

--retries:當(dāng)Health check連續(xù)失敗次數(shù)超過(guò)此設(shè)定時(shí),則會(huì)將狀態(tài)更改為,預(yù)設(shè)為3次unhealthy

--start-period:啟動(dòng)時(shí)間,預(yù)設(shè)為0秒

HEALTHCHECK可以通過(guò)Dockerfile或是docker-compose.yml設(shè)定:

Dockerfile 示例

在Dockerfile中,HEALTHCHECK指令格式為

HEALTHCHECK [options] CMD?<command>

<command>可以是shell指令或是exec格式(和其他Dockerfile指令相同,可以參考ENTRYPOINT)。而一個(gè)Dockerfile中只能有一個(gè)HEALTHCHECK指令,如果同時(shí)有多個(gè)HEALTHCHECK指令,則只有最后一個(gè)有效。

<command>的返回值代表container的狀態(tài):

0:成功,container is healthy

1:失敗,如果失敗超過(guò)指定次數(shù),則container為unhealthy

2: reserved,不要使用這個(gè)值

假設(shè)我們的container服務(wù)是web服務(wù),我們可以使用來(lái)檢查服務(wù)是否正常運(yùn)行,例如:每30秒檢查一次是否可在5秒內(nèi)響應(yīng)請(qǐng)求:curl http://localhost:3000

# ...


HEALTHCHECK --interval=30s --timeout=5s --retries=5 --start_period=30s \
  CMD curl -fs http://localhost:3000/ || exit 1


# ...

Docker-compose 示例

docker-compose.yml的healthcheck,示例如下:

version:?"3.7"
services:
  api:
    restart: always
    image: api
    container_name: api
    ports:
      - 3000:3000
    build:
      context: ./api
    healthcheck:
      test: curl -fs http://localhost:3000/ || exit 1
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - net
networks:
  net:
    name: net
    driver: bridge

其中test必須是string或list.如果是list,第一個(gè)item必須是NONE,或CMD-SHELL。如果是string,則等同于CMD-SHELL。

確認(rèn)健康狀態(tài)

在設(shè)定好health check指令之后,接著啟動(dòng)container,檢查container狀態(tài)時(shí)可以看到初始狀態(tài)是:health: starting

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                       NAMES
6c7b9ca321d2        api:1.0.0           "uwsgi --ini /home/d…"   5 seconds ago       Up 2 seconds (health: starting)   0.0.0.0:3000->3000/tcp      api

過(guò)30秒之后再執(zhí)行一次docker ps,可以看到container的狀態(tài)變成:healthy

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                       NAMES
6c7b9ca321d2????????api:1.0.0???????????"uwsgi?--ini?/home/d…"???35?seconds?ago??????Up?32?seconds?(healthy)???????????0.0.0.0:3000->3000/tcp??????api

而如果連續(xù)失敗超過(guò)指定次數(shù),狀態(tài)會(huì)變成unhealthy。

docker compose 配置 unhealthy的時(shí)候自動(dòng)重啟,docker,eureka,容器,運(yùn)維,云原生

關(guān)鍵步驟:重新啟動(dòng)不正常的容器

以上的步驟只有檢查container的健康狀態(tài),但沒(méi)有針對(duì)unhealthy container做任何處理,這部分我們可以搭配docker-autoheal來(lái)重啟unhealthy container。先看下AutoHeal的工作機(jī)制。

docker compose 配置 unhealthy的時(shí)候自動(dòng)重啟,docker,eureka,容器,運(yùn)維,云原生

autoheal可以直接使用docker執(zhí)行,或是寫(xiě)在docker-compose中:

使用 docker 指令:

$ docker run -d \
    --name autoheal \
    --restart=always \
    -e AUTOHEAL_CONTAINER_LABEL=all \
    -v /var/run/docker.sock:/var/run/docker.sock \
    willfarrell/autoheal

使用docker-compose指令:

version:?"3.7"
services:
  autoheal:
    restart: always
    image: willfarrell/autoheal
    container_name: autoheal
    environment:
      - AUTOHEAL_CONTAINER_LABEL=all
    volumes:
??????-?/var/run/docker.sock:/var/run/docker.sock

然后執(zhí)行?docker-compose up -d autoheal 就可以啟動(dòng)。

啟動(dòng)之后可以通過(guò)docker ps觀察unhealthy的容器是否重啟了。也可以查看autoheal的日志查看是否有啟動(dòng)記錄。

最后再給大家介紹一種模擬unhealthy的方法,正常情況下都是healthy的,可以通過(guò)修改命令來(lái)模擬unhealthy。比如模擬mysql的服務(wù),我們可以使用如下命令。

test:?["CMD",?"nc?-vz?localhost?3307?||?exit?1"]

正常監(jiān)聽(tīng)3306端口,我們用3307連接檢查,就會(huì)一直處于unhealthy狀態(tài),這個(gè)時(shí)候我們可以通過(guò)autoheal的日志觀察到對(duì)mysql容器的重啟。

有了這個(gè)機(jī)制,以后docker假死的情況就可以自動(dòng)重啟了。這個(gè)檢查和自動(dòng)重啟機(jī)制對(duì)于數(shù)據(jù)庫(kù)或者tomcat服務(wù)都非常有用。如果使用過(guò)程中有什么問(wèn)題也歡迎發(fā)消息給我們。

docker compose 配置 unhealthy的時(shí)候自動(dòng)重啟,docker,eureka,容器,運(yùn)維,云原生文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-840242.html

到了這里,關(guān)于強(qiáng)制異常容器重啟,讓你的Docker錦上添花的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • docker容器重啟策略

    當(dāng)使用docker run命令運(yùn)行一個(gè)容器的時(shí)候,使用--restart選項(xiàng)可以配置該容器的重啟策略。 no 不要自動(dòng)重啟容器(默認(rèn)) on-failure[:max-retries] 如果容器發(fā)生錯(cuò)誤導(dǎo)致退出(非0退出狀態(tài)),則重啟該容器??梢允褂?:max-retries 選項(xiàng)限制嘗試重啟的次數(shù)。 always 如果容器退出了,總是

    2023年04月18日
    瀏覽(101)
  • docker重啟容器

    docker重啟容器

    2024年02月16日
    瀏覽(97)
  • docker容器重啟故障

    強(qiáng)殺docker進(jìn)程后,重啟docker。docker中的容器無(wú)法啟動(dòng)并報(bào)錯(cuò) docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container ‘XXXXXXXXXXXXXXXX’: already exists 原因:舊容器未安全退出 解決方式: docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm 容器

    2024年04月13日
    瀏覽(232)
  • docker—啟動(dòng)、停止、重啟容器實(shí)例

    docker—啟動(dòng)、停止、重啟容器實(shí)例

    先查看已經(jīng)暫停的容器實(shí)例信息 docker ps -a 通過(guò) docker start xxx 啟動(dòng)容器 通過(guò) docker ps 查看當(dāng)前啟動(dòng)的容器 1、docker stop 此方式常常被翻譯為優(yōu)雅的停止容器 docker stop 容器ID或容器名 參數(shù) -t:關(guān)閉容器的限時(shí),如果超時(shí)未能關(guān)閉則用kill強(qiáng)制關(guān)閉,默認(rèn)值10s,這個(gè)時(shí)間用于容器的

    2024年02月09日
    瀏覽(98)
  • Docker 容器設(shè)置為 自動(dòng)重啟

    有時(shí)Docker服務(wù)出現(xiàn)異常,或者服務(wù)器出現(xiàn)異常,需要重啟Docker服務(wù)或者服務(wù)器; 如果希望有一部分基礎(chǔ)的或者常用的容器,在服務(wù)或者服務(wù)器重啟的時(shí)候,可以實(shí)現(xiàn)自動(dòng)啟動(dòng),僅需使用命令進(jìn)行簡(jiǎn)單配置即可實(shí)現(xiàn)。 Docker 容器設(shè)置為自動(dòng)重啟,分為兩種情況:新建容器時(shí)設(shè)置

    2024年02月07日
    瀏覽(92)
  • Docker 容器設(shè)置為自動(dòng)重啟

    Docker 容器設(shè)置為自動(dòng)重啟

    ?Docker自動(dòng)重啟原因 Docker自動(dòng)重啟通常是由以下幾個(gè)原因?qū)е碌模?程序崩潰 系統(tǒng)內(nèi)存不足 系統(tǒng)進(jìn)程使用過(guò)多CPU和RAM導(dǎo)致的阻塞 docker容器被殺死或重新啟動(dòng),導(dǎo)致應(yīng)用程序中斷 網(wǎng)絡(luò)中斷 當(dāng)這些問(wèn)題出現(xiàn)時(shí),Docker會(huì)自動(dòng)重啟運(yùn)行中的服務(wù)來(lái)嘗試解決問(wèn)題。 docker update --restart

    2024年02月03日
    瀏覽(93)
  • Docker 查詢、停止、刪除和重啟容器

    docker 列出所有容器ID docker 查看所有運(yùn)行容器 docker 查看正在運(yùn)行容器 docker 停止指定的 container (容器) 溫馨提示:刪除 container (容器) 的鏡像文件,必須先停止 container (容器) 運(yùn)行 。 知識(shí)拓展:停止docker 所有容器(包含正在運(yùn)行) container (容器) docker 刪除指定的

    2024年02月03日
    瀏覽(107)
  • 無(wú)法停止刪除容器,Mac重啟Docker

    不能停止、殺死、刪除容器,使用以下命令得到錯(cuò)誤消息: 無(wú)法停止、殺死、刪除容器,因?yàn)闆](méi)有接收退出事件“receive an exit event”。 沒(méi)有找到強(qiáng)制停止容器的方法,只能重啟容器:

    2024年02月07日
    瀏覽(87)
  • docker篇---重啟策略 + run 容器常用參數(shù)

    container runctime 負(fù)責(zé)的是容器的生命周期管理 OCI :(open container initiative)開(kāi)源容器協(xié)議, 包含兩個(gè)規(guī)范:運(yùn)行規(guī)范(runctime spec)-對(duì)容器狀態(tài)、創(chuàng)建、刪除、查看定義 鏡像規(guī)范(image-spec)-如何創(chuàng)建一個(gè)OCI 運(yùn)行時(shí)的系統(tǒng)包 CRI (container run interface) 容器運(yùn)行接口 隔開(kāi)了各個(gè)

    2024年02月12日
    瀏覽(89)
  • 在Docker守護(hù)進(jìn)程停機(jī)期間保持容器運(yùn)行(即重啟Docker時(shí),正在運(yùn)行的容器不會(huì)停止)

    ? 在默認(rèn)情況下,當(dāng) Docker 守護(hù)進(jìn)程終止時(shí),它將關(guān)閉正在運(yùn)行的容器。不過(guò),我們可以配置該守護(hù)進(jìn)程,以便在該守護(hù)進(jìn)程不可用時(shí)容器仍在運(yùn)行。這種功能稱為實(shí)時(shí)恢復(fù)。實(shí)時(shí)還原選項(xiàng)有助于減少由于守護(hù)進(jìn)程崩潰、計(jì)劃中斷或升級(jí)而導(dǎo)致的容器停機(jī)時(shí)間。 Docker官方相關(guān)

    2024年02月03日
    瀏覽(96)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包