最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 解決docker run時候啟動兩個占有不同端口的問題

    解決docker run時候啟動兩個占有不同端口的問題

    這篇文章主要介紹了解決docker run時候啟動兩個占有不同端口的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker安裝MySQL并使用Navicat連接的操作方法

    Docker安裝MySQL并使用Navicat連接的操作方法

    這篇文章主要介紹了Docker安裝MySQL并使用Navicat連接,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Docker 安裝 MySQL(8和5.7)

    Docker 安裝 MySQL(8和5.7)

    這篇文章主要介紹了Docker 安裝 MySQL(8和5.7),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • docker-swarm教程之安全保護加密數(shù)據(jù)的方法詳解

    docker-swarm教程之安全保護加密數(shù)據(jù)的方法詳解

    默認情況下,集群管理器使用的raft 算法的日志在磁盤上加密,這種靜態(tài)加密可保護服務(wù)配置和數(shù)據(jù)免受訪問加密Raft日志的攻擊者的攻擊,因此引入了Docker secret功能,來保證加密文件的安全,本文將給大家詳細的介紹一下如何安全的保護加密數(shù)據(jù)
    2023-08-08
  • 在Docker中利用Tomcat快速部署web應(yīng)用的方法示例

    在Docker中利用Tomcat快速部署web應(yīng)用的方法示例

    這篇文章我們就來說一下怎么在docker中快速部署一個web應(yīng)用。文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Docker 中的 bootfs、rootfs 簡介

    Docker 中的 bootfs、rootfs 簡介

    Docker中的bootfs和rootfs是容器文件系統(tǒng)的兩個層次,bootfs負責(zé)內(nèi)核啟動,而rootfs提供運行環(huán)境,容器共享宿主機內(nèi)核,因此沒有獨立的bootfs,只使用精簡的rootfs,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • docker安裝Jenkins配置Gitee SSH密鑰踩坑解決

    docker安裝Jenkins配置Gitee SSH密鑰踩坑解決

    這篇文章主要為大家介紹了docker安裝Jenkins配置Gitee SSH密鑰踩坑解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Docker 刪除及清理鏡像的方法

    Docker 刪除及清理鏡像的方法

    本文主要介紹了Docker 刪除及清理鏡像的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Dockerfile常用命令的使用簡介

    Dockerfile常用命令的使用簡介

    這篇文章主要介紹了Dockerfile常用命令的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用Docker,感興趣的朋友可以了解下
    2021-04-04
  • 如何使用docker部署前端應(yīng)用的方法步驟

    如何使用docker部署前端應(yīng)用的方法步驟

    這篇文章主要介紹了如何使用docker部署前端應(yīng)用的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論

西峡县| 高台县| 确山县| 澜沧| 凉城县| 镇巴县| 闵行区| 通州市| 鄂托克前旗| 乌拉特前旗| 灵川县| 建水县| 申扎县| 亳州市| 苏尼特右旗| 阳朔县| 十堰市| 河北区| 明星| 休宁县| 庐江县| 山东省| 贡觉县| 大安市| 扶绥县| 绍兴县| 浦江县| 林甸县| 濉溪县| 酉阳| 巢湖市| 易门县| 盐城市| 永平县| 文山县| 开远市| 凤凰县| 龙州县| 江达县| 阿城市| 郎溪县|