百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Docker停止容器使用stop、restart 还是 kill?

nanshan 2024-12-02 23:23 6 浏览 0 评论

  1. docker kill立即强制停止容器
  2. docker stop优雅地停止容器
  3. docker restart先优雅停止容器,再启动一个新的容器实例
  4. docker killdocker stop区别

Docker停止容器,是使用stop、kill还是restart?用户通过 docker stopdocker kill 命令主动停止容器。前者发送 SIGTERM 信号让容器优雅退出,后者发送 SIGKILL 信号强制立即退出。docker restart,命令包含了停止现有容器(类似于 docker stop)和重新启动新容器(类似于 docker start)这两个动作。今天来了解一下这三个命令。

使用以下命令可以创建一个后台运行的 Redis 容器,并将其公开到主机的 6379 端口,同时为容器赋予名称 redis

docker run -d -p 6379:6379 --name redis redis

在宿主机安装redis-cli命令行客户端工具。

1. docker kill立即强制停止容器

docker kill 命令用于立即强制停止一个或多个正在运行的 Docker 容器。当您执行 docker kill 时,Docker 会向容器发送一个 SIGKILL 信号,这是一种不可被捕获、阻塞或忽略的信号,导致容器内的主进程立即停止运行,不会给容器进程提供任何清理或保存状态的机会。因此,docker kill 是一种非常直接且不优雅的停止方式,适用于需要立即终止容器且不关心容器内部状态的情况。SIGKILL是什么,如果你使用过Linux命令kill -9 [pid],SIGKILL编号即为9。

使用示例:

首先,使用命令docker wait redis监听redis退出状态码。打开另一个终端运行如下命令:

?  ~  docker kill redis
redis


?  ~ docker wait redis
137

运行docker wait redis命令窗口,输出状态码137。状态码137通常表示进程接收到 SIGKILL 信号而被强制终止。这意味着名为 Redis 的容器是因为接收到 SIGKILL 信号而被强制终止的。


docker kill同时可以强制停止多个容器:

docker kill container1 container2 container3 ...

2. docker stop优雅地停止容器

docker stop 命令用于优雅地停止一个或多个正在运行的 Docker 容器。当您执行 docker stop 时,Docker 会向容器发送一个 SIGTERM 信号,这是进程的标准终止信号。容器内的主进程接收到 SIGTERM 后,通常会触发清理操作,如保存当前状态、关闭网络连接、释放资源等,并在完成这些操作后自行退出。默认情况下,Docker 会给容器预留10秒的时间来优雅地关闭。如果容器在这段时间内没有自行退出,Docker 会发送一个 SIGKILL 信号强制终止容器。希望容器在停止前有机会进行必要的清理和状态保存工作,尤其是当容器内运行的服务支持优雅关闭时。应使用docker stop

使用示例:

?  ~ docker stop redis
137

docker stop同时可以停止多个容器:

docker stop container1 container2 container3 ...

3. docker restart先优雅停止容器,再启动一个新的容器实例

docker restart 命令用于重启一个或多个已停止的 Docker 容器。执行此命令时,Docker 首先会发送 SIGTERM 信号,等待容器优雅地停止。一旦容器停止,Docker 立即启动一个新的容器实例,使用相同的配置和镜像。这意味着容器内的状态在重启过程中不会保留。需要重启容器以恢复服务或应用新的配置。

使用示例:

?  ~ docker restart redis
redis

docker restart同时可以重启多个容器:

docker restart container1 container2 container3

4. docker stop与docker kill区别

docker stop 会向容器发送一个SIGTERM,等待容器保存状态,优雅退出。

docker kill 会向容器发送一个SIGKILL。同Linux的kill -9


Redis使用docker stop的例子:

?  ~ docker start redis
redis
?  ~ redis-cli
127.0.0.1:6379> set hello abc
OK
127.0.0.1:6379> exit
?  ~ docker stop redis
redis
?  ~ docker start redis
redis
?  ~ redis-cli
127.0.0.1:6379> get hello
"abc"
127.0.0.1:6379> exit

第一步,首先,启动刚kill掉的redis容器,接着连接redis-cli,输入命令set hello abc,设置一个key为hello,value为abc。使用exit退出redis-cli

第二步,使用命令docker stop redis停止容器,接着使用命令docker start redis启动容器。

第三步,再次连接redis-cli,输入命令get hello,输出abc。最后使用exit断开redis-cli连接。

结果,在 Redis 中,我们有一个key为hello,值为abc。最后使用exit断开redis-cli连接。

Redis容器运行docker kill的例子:

?  ~ docker start redis
redis
?  ~ redis-cli
127.0.0.1:6379> set hello 123
OK
127.0.0.1:6379> get hello
"123"
127.0.0.1:6379> exit
?  ~ docker kill redis
redis
?  ~ docker start  redis
redis
?  ~ redis-cli
127.0.0.1:6379> get hello
"abc"
127.0.0.1:6379> exit

第一步,首先,启动 Redis 容器。连接redis-cli,输入命令get hello,输出key为hello的值为abc。接着输入命令set hello abc更改key为hello值value为123。使用exit退出redis-cli

第二步,使用命令docker kill redis停止容器,接着使用命令docker start redis启动容器。

第三步,再次连接redis-cli,输入命令get hello,输出abc。最后使用exit断开redis-cli连接。

可以看出,我们已经变更过key为hello的值为123,但提高kill结束容器,没有等待Redis把数据持久化到磁盘就推退出了。值还是abc,为刚docker stop示例中的结果。

而使用docker stop停止的容器会优雅退出。 Redis 会把数据持久化到磁盘。

docker restartdocker stop效果一致。

在管理 Redis 这类需要数据持久化的容器时,推荐使用 docker stop 以确保数据的完整性。若需立即终止且不关心数据丢失,可使用 docker killdocker restart 适用于需要重启服务以应用新配置或恢复服务的情况,其效果与先执行 docker stopdocker start 相同。


忍不住要加个关注!不是我吹,但你会后悔没关注的!

相关推荐

今晚拿下PHP反序列化的一系列操作

引言在CTF中反序列化类型的题目还是比较常见的,之前有学习过简单的反序列化,以及简单pop链的构造。这次学习内容为php内置的原生类的反序列化以及一点进阶知识。在题目给的的代码中找不到可利用的类时,这...

Win10安装Apache和PHP(apache安装php模块)

说明:虽然PHPStudy之类的软件给我们提供了方便的集成环境,但是其使用的是非线程安全的PHP版本(NotThreadSafe,NTS),某些功能不可以使用。所以,我们还需要自己再安装一个Apa...

腾讯云云函数部署laravel项目(腾讯云函数 selenium)

1、购买函数套餐包在Serverless控制台,选择函数套餐包进行购买2、新建函数服务2.1、模板创建选择函数URL:新建函数URL,启用公网访问:2.1.1、postman访问首页2.1.2、pos...

站长教你搭建属于自己的网站(站长教你搭建属于自己的网站是什么)

每个人都希望可以有自己的网站,因为那样高端大气上档次,低调奢华有内涵,尤其是公司用户,一般会有自己的网站。而个人呢,也可以搭建自己的网站博客,论坛等,但是一般个人都是搭建博客的。好了,那么下面站长教你...

微信公众号开发出现 cURL error 60: SSL certificate problem ssl证书

在phpstudy的环境下如果出现这样的报错cURLerror60:SSLcertificateproblem:unabletogetlocalissuercertificat...

【网络安全】关于PHP Study nginx解析高危漏洞的预警通报

网络安全近日,山石网科安全研究院监测发现PHPStudyWindows最新版本存在nginx解析漏洞,可以造成任意代码执行。一、漏洞情况phpStudy是一个PHP调试环境的程序集成包,该程序包集成...

PHP 环境 搭建教程(php环境搭建教程linux)

PHP是一种编程语言,很多网站都用PHP语言编写,我们有时候需要测试一个网站,就需要PHP环境才能运行,又要安装Apache、又要安装MySQL……真的非常麻烦。其实我们可以使用PHP集成...

黑客搭建钓鱼平台,手把手教你如何钓鱼?

跨站脚本攻击XSS:通过HTML注入篡改了网页,插入了恶意的脚本,从而用户浏览网页时,控制用户浏览器的一种攻击那么,我们搭建一个XSS钓鱼平台吧,注意:这个平台仅用于学习和测试,小伙伴们不要动有坏心思...

php源码网站搭建方法和过程(php网站源码完整)

web网站是我们上网的窗口,而网站是如何搭建的呢?今天我们来做一个介绍,以php代码为例来进行介绍(后续会介绍一下java代码搭建,如果想要我这里涉及的工具或源码请私信我)。1、首先你需要去网上下载你...

使用VS Code调试PhpStudy环境里的代码

最近几个月把所有项目都迁过来VSCode了(除了因为Unity调试问题反而用回了VisualStudio),PHP也就抛弃了最强的PhpStorm。这段时间抽空在帮朋友处理PHP项目,然...

phpstudy搭建PHP+Mysql服务(用phpstudy搭建服务器)

PHP是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP是免费的,并且使用非常广泛。同时,对于像微软ASP这样的竞争者来说,PHP无疑是另一种高效率的选项。(1)PHP环境搭建使用V...

Windows安装phpstudy(Windows安装mysql)

说明:phpstudy是一个PHP+MySQL+Apache的集成环境,可以减少单独部署各个所需软件的麻烦,以及更加方便地切换版本。phpenv、wamp等软件的作用一样。由于环境的不同,安装过程中可...

phpstudy安装及简单使用教程(phpstudy安装教程详解)

phpstudy前不久爆出有后门,我的看法是,去看下是哪个版本有后门,为啥会有后门,怎么解决掉这个后门,而不是听到后门就弃用了。毕竟phpstudy绿色安装,配置简单,多版本融合,真香。前言:关于开发...

如何对dedeCMS的开源程序进行二次开发

二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核。为了让更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会...

mysql基础问题三问(底层逻辑;正在执行;日志观察)

背景:经常面试会遇到且实际工作中也会应用到的三个场景:目录:一.mysql查询时的底层原理是什么?二.如何查看正在执行的mysql语句?三.如何观察mysql运行过程中的日志信息?-----...

取消回复欢迎 发表评论: