国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

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

weizx / 426人閱讀

摘要:容器信號(hào)使用我們跑在容器中的程序通常想在容器退出之前做一些清理操作,比較常用的方式是監(jiān)聽(tīng)一個(gè)信號(hào),延遲關(guān)閉容器。我們測(cè)試一個(gè)構(gòu)建運(yùn)行再開(kāi)一終端,運(yùn)行發(fā)現(xiàn)并沒(méi)有打印出監(jiān)聽(tīng)信號(hào)失敗。

容器信號(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)閐ocker 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)程。

更多問(wèn)題希望大家關(guān)注我的github: https://github.com/fanux

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/27050.html

相關(guān)文章

  • 優(yōu)雅地關(guān)閉kubernetes中nginx

    摘要:被設(shè)計(jì)為這樣一種方式,父進(jìn)程必須明確地等待子進(jìn)程終止,以便收集它的退出狀態(tài)。會(huì)完成的刪除,將優(yōu)雅退出的時(shí)間設(shè)置為表示立即刪除。 SIGINT SIGTERM SIGKILL區(qū)別 三者都是結(jié)束/終止進(jìn)程運(yùn)行。 1.SIGINT SIGTERM區(qū)別 前者與字符ctrl+c關(guān)聯(lián),后者沒(méi)有任何控制字符關(guān)聯(lián)。前者只能結(jié)束前臺(tái)進(jìn)程,后者則不是。 2.SIGTERM SIGKILL的區(qū)別 前者可以被...

    Noodles 評(píng)論0 收藏0
  • 優(yōu)雅地關(guān)閉kubernetes中nginx

    摘要:被設(shè)計(jì)為這樣一種方式,父進(jìn)程必須明確地等待子進(jìn)程終止,以便收集它的退出狀態(tài)。會(huì)完成的刪除,將優(yōu)雅退出的時(shí)間設(shè)置為表示立即刪除。 SIGINT SIGTERM SIGKILL區(qū)別 三者都是結(jié)束/終止進(jìn)程運(yùn)行。 1.SIGINT SIGTERM區(qū)別 前者與字符ctrl+c關(guān)聯(lián),后者沒(méi)有任何控制字符關(guān)聯(lián)。前者只能結(jié)束前臺(tái)進(jìn)程,后者則不是。 2.SIGTERM SIGKILL的區(qū)別 前者可以被...

    余學(xué)文 評(píng)論0 收藏0
  • docker 新手向 - 防止容器自動(dòng)退出解決方案

    摘要:其實(shí)我們可以更優(yōu)雅的使用容器的和參數(shù)來(lái)將系統(tǒng)必有命令作為前置命令開(kāi)啟常駐運(yùn)行,如此容器便不會(huì)自動(dòng)退出了。 本文主要簡(jiǎn)單介紹 docker 容器與前置進(jìn)程的關(guān)系,以及如何編寫(xiě) Dockerfile/docker-compose.yml 優(yōu)雅的讓容器可以常駐運(yùn)行。 docker 容器的生命周期是同容器中的前置進(jìn)程相關(guān)在一起的,這也是我們平時(shí)可能會(huì)遇到一些容器只是運(yùn)行幾秒便自動(dòng)退出的原因:因...

    Miyang 評(píng)論0 收藏0
  • Windows下運(yùn)用Docker部署Node.js開(kāi)發(fā)環(huán)境

    摘要:開(kāi)始在下部署開(kāi)發(fā)環(huán)境著實(shí)遍地坑,每遇到一個(gè)問(wèn)題都要去原因再試圖解決。該鏡像就是已經(jīng)安裝了環(huán)境的鏡像命名為。在下,期望運(yùn)行應(yīng)用的容器中,同樣可以執(zhí)行該命令。 開(kāi)始 在windows下部署nodejs開(kāi)發(fā)環(huán)境著實(shí)遍地坑,每遇到一個(gè)問(wèn)題都要去google原因再試圖解決。而且如果你想把你寫(xiě)好的應(yīng)用交給別人跑跑看,他可能同樣需要折騰很久才能真正在他的環(huán)境下運(yùn)行起來(lái)。被坑了好些時(shí)日最終還是放棄,轉(zhuǎn)...

    canger 評(píng)論0 收藏0
  • Windows下運(yùn)用Docker部署Node.js開(kāi)發(fā)環(huán)境

    摘要:開(kāi)始在下部署開(kāi)發(fā)環(huán)境著實(shí)遍地坑,每遇到一個(gè)問(wèn)題都要去原因再試圖解決。該鏡像就是已經(jīng)安裝了環(huán)境的鏡像命名為。在下,期望運(yùn)行應(yīng)用的容器中,同樣可以執(zhí)行該命令。 開(kāi)始 在windows下部署nodejs開(kāi)發(fā)環(huán)境著實(shí)遍地坑,每遇到一個(gè)問(wèn)題都要去google原因再試圖解決。而且如果你想把你寫(xiě)好的應(yīng)用交給別人跑跑看,他可能同樣需要折騰很久才能真正在他的環(huán)境下運(yùn)行起來(lái)。被坑了好些時(shí)日最終還是放棄,轉(zhuǎn)...

    ChristmasBoy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<