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

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

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

前言

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

容器信號使用

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

構建:

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的方式派生子進程。

總結

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

相關文章

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

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

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

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

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

    Docker 安裝 MySQL(8和5.7)

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

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

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

    在Docker中利用Tomcat快速部署web應用的方法示例

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

    Docker 中的 bootfs、rootfs 簡介

    Docker中的bootfs和rootfs是容器文件系統(tǒng)的兩個層次,bootfs負責內(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常用命令的使用簡介,幫助大家更好的理解和學習使用Docker,感興趣的朋友可以了解下
    2021-04-04
  • 如何使用docker部署前端應用的方法步驟

    如何使用docker部署前端應用的方法步驟

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

最新評論

攀枝花市| 平塘县| 门源| 钟山县| 富锦市| 北碚区| 邵东县| 天峨县| 汝城县| 临颍县| 武义县| 阜康市| 隆子县| 仁寿县| 泰宁县| 莲花县| 萝北县| 固原市| 石棉县| 勃利县| 灵寿县| 若尔盖县| 鄢陵县| 偏关县| 余庆县| 南靖县| 玛纳斯县| 和静县| 稷山县| 东阿县| 马关县| 桓台县| 永德县| 乐东| 云霄县| 永善县| 霍州市| 翁牛特旗| 永定县| 漯河市| 全南县|