欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

最近因為工作的原因,談到了關(guān)于如何正確的退出運行中的docker容器,這是一個非常值得討論的話題了。本文將給出詳細的介紹,下面來一起看看吧。

容器信號使用

我們跑在容器中的程序通常想在容器退出之前做一些清理操作,比較常用的方式是監(jiān)聽一個信號,延遲關(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)建容器時可直接指定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
...

但是。。。

我們測試一個:

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 .

運行:

docker run --name signal signal:latest

再開一終端,運行:

docker stop -t 10 signal

發(fā)現(xiàn)并沒有打印出Got signal:... 監(jiān)聽信號失敗。

問題再于:我們docker inspect signal看一下

可以看到

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

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

所以原因找到了,是因為docker engine只給pid為1的進程發(fā)送信號,sh收到了信號而我們想要的signal進程沒有收到信號

解決辦法:

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

總結(jié)

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

相關(guān)文章

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

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

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

    docker容器化部署及使用方式

    這篇文章主要介紹了docker容器化部署及使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    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ū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫的詳細過程

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

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

    docker entrypoint入口文件詳解

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

    Docker?ZooKeeper3.4.10集群安裝配置過程

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

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

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

    一文教會你如何高效地搭建Docker私有倉庫

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

    Docker運行hello-world鏡像失敗或超時的問題

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

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

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

最新評論