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

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

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

前言

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

容器信號(hào)使用

我們跑在容器中的程序通常想在容器退出之前做一些清理操作,比較常用的方式是監(jiān)聽一個(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

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

docker stop -t 10 signal

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

問題再于:我們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)程沒有收到信號(hào)

解決辦法:

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

總結(jié)

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

相關(guān)文章

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

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

    這篇文章主要介紹了CentOS7使用docker部署Apollo配置中心的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • docker-compose安裝部署NebulaGraph圖數(shù)據(jù)庫的詳細(xì)過程

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

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

    docker entrypoint入口文件詳解

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論