亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于docker容器優(yōu)雅退出的問(wèn)題詳解

 更新時(shí)間:2017年09月25日 11:20:05   作者:ionic  
在Docker大火的今天,我們能夠非常方便的使用容器打包我們的應(yīng)用程序,并且將它在我們的服務(wù)器上部署并運(yùn)行起來(lái)。而下面這篇文章主要給大家介紹了關(guān)于docker容器如何優(yōu)雅退出的問(wèn)題,需要的朋友可以參考下。

前言

最近因?yàn)楣ぷ鞯脑?,談到了關(guān)于如何正確的退出運(yùn)行中的docker容器,這是一個(gè)非常值得討論的話(huà)題了。本文將給出詳細(xì)的介紹,下面來(lái)一起看看吧。

容器信號(hào)使用

我們跑在容器中的程序通常想在容器退出之前做一些清理操作,比較常用的方式是監(jiān)聽(tīng)一個(gè)信號(hào),延遲關(guān)閉容器。

docker提供了這樣的功能:

╰─➤ docker stop --help

Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Options:
 --help Print usage
 -t, --time int Seconds to wait for stop before killing it (default 10)

docker 1.13以上版本在創(chuàng)建容器時(shí)可直接指定STOP_TIMEOUT 和STOP_SIGNAL參數(shù):

$ docker run --help
...
--stop-signal string   Signal to stop a container, SIGTERM by default (default "SIGTERM")
--stop-timeout int   Timeout (in seconds) to stop a container
...

但是。。。

我們測(cè)試一個(gè):

package main

import (
 "fmt"
 "os"
 "os/signal"
 "syscall"
 "time"
)

func main() {
 fmt.Println("signal test")
 go func() {
 for {
  c := make(chan os.Signal, 1)
  signal.Notify(c, syscall.SIGTERM)
  s := <-c
  fmt.Println("Got signal:", s)
 }
 }()
 time.Sleep(time.Second * 100)
}

Dockerfile:

FROM golang:1.8.0
COPY main.go .
RUN go build -o signal && cp signal $GOPATH/bin
CMD signal 

構(gòu)建:

docker build -t signal:latest .

運(yùn)行:

docker run --name signal signal:latest

再開(kāi)一終端,運(yùn)行:

docker stop -t 10 signal

發(fā)現(xiàn)并沒(méi)有打印出Got signal:... 監(jiān)聽(tīng)信號(hào)失敗。

問(wèn)題再于:我們docker inspect signal看一下

可以看到

Path:/bin/sh
Args:[
 -c,
 signal
]

或者docker exec signal ps 看一下可以看到pid為1的進(jìn)程并不是signal, 而是shell.

所以原因找到了,是因?yàn)?code>docker engine只給pid為1的進(jìn)程發(fā)送信號(hào),sh收到了信號(hào)而我們想要的signal進(jìn)程沒(méi)有收到信號(hào)

解決辦法:

FROM golang:1.8.0
COPY main.go .
RUN go build -o signal && cp signal $GOPATH/bin
CMD ["signal"] # 不能寫(xiě)成 CMD signal, 這會(huì)直接exec,否則會(huì)以shell的方式派生子進(jìn)程。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • CentOS7使用docker部署Apollo配置中心的實(shí)現(xiàn)

    CentOS7使用docker部署Apollo配置中心的實(shí)現(xiàn)

    這篇文章主要介紹了CentOS7使用docker部署Apollo配置中心的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • docker容器化部署及使用方式

    docker容器化部署及使用方式

    這篇文章主要介紹了docker容器化部署及使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • docker-compose up -d和docker-compose up --build的區(qū)別

    docker-compose up -d和docker-compose up -

    本文主要介紹了docker-compose up -d和docker-compose up --build的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫(kù)的詳細(xì)過(guò)程

    docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫(kù)的詳細(xì)過(guò)程

    NebulaGraph Studio是一款可以通過(guò)Web訪(fǎng)問(wèn)的開(kāi)源圖數(shù)據(jù)庫(kù)可視化工具,搭配N(xiāo)ebulaGraph內(nèi)核使用,提供構(gòu)圖、數(shù)據(jù)導(dǎo)入、編寫(xiě)nGQL查詢(xún)等一站式服務(wù),這篇文章主要介紹了docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫(kù)的詳細(xì)過(guò)程,感興趣的朋友一起看看吧
    2023-12-12
  • docker entrypoint入口文件詳解

    docker entrypoint入口文件詳解

    這篇文章主要介紹了docker entrypoint入口文件詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Docker?ZooKeeper3.4.10集群安裝配置過(guò)程

    Docker?ZooKeeper3.4.10集群安裝配置過(guò)程

    這篇文章主要介紹了ZooKeeper3.4.10集群安裝配置-Docker,集群部署配置步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 使用dockerfile構(gòu)建nginx鏡像的方法示例

    使用dockerfile構(gòu)建nginx鏡像的方法示例

    這篇文章主要介紹了使用dockerfile構(gòu)建nginx鏡像的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 一文教會(huì)你如何高效地搭建Docker私有倉(cāng)庫(kù)

    一文教會(huì)你如何高效地搭建Docker私有倉(cāng)庫(kù)

    Docker容器應(yīng)用的開(kāi)發(fā)和運(yùn)行離不開(kāi)可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉(cāng)庫(kù),但是從安全和效率等方面考慮,部署我們私有環(huán)境內(nèi)的Registry也是非常必要的,這篇文章主要介紹了如何高效地搭建Docker私有倉(cāng)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Docker運(yùn)行hello-world鏡像失敗或超時(shí)的問(wèn)題

    Docker運(yùn)行hello-world鏡像失敗或超時(shí)的問(wèn)題

    在安裝Docker并嘗試運(yùn)行hello-world時(shí),可能會(huì)遇到超時(shí)問(wèn)題,這通常是由于默認(rèn)的鏡像源訪(fǎng)問(wèn)速度慢造成的,解決這個(gè)問(wèn)題的辦法是更換鏡像源,雖然許多人推薦使用阿里云的鏡像源,對(duì)Docker hello-world超時(shí)問(wèn)題感興趣的朋友一起看看吧
    2024-09-09
  • 詳細(xì)記一次Docker部署服務(wù)的爬坑歷程

    詳細(xì)記一次Docker部署服務(wù)的爬坑歷程

    這篇文章主要介紹了詳細(xì)記一次Docker部署服務(wù)的爬坑歷程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03

最新評(píng)論