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

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

nanshan 2024-12-02 23:23 7 浏览 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 相同。


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

相关推荐

在 Ubuntu 上安装 Zabbix(以 Zabbix 6.4 LTS 版本为例)

Zabbix是一个流行的开源监控解决方案,能够监控各种网络参数和服务器健康状态。一、环境准备系统要求Ubuntu20.04/22.04LTS至少2GBRAM(生产环境建议4GB+)至少1...

如何在 Ubuntu 24.04 服务器上安装 Apache Solr

ApacheSolr是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。Solr基于Java开发,提供了分布式索引、复制、负载均衡及自...

如何在 Ubuntu 24.04 LTS 或 22.04/20.04 上安装 Apache Maven

Maven是由Apache托管的开源工具,用于管理Java项目。它包含一个项目对象模型(POM):一个配置文件(XML),其中包含项目的基本信息,包括配置、项目依赖项等。Maven可以处理...

Cursor的终极对手——Trae Pro最新系统提示词

前段时间,字节的AI编程神器Trae国际版,终于甩出了Pro订阅计划!很多对它又爱又恨的小伙伴,直呼:终于等到你。爱它,是因为Trae长期免费+体验真香;恨它?还不是那该死的排队等待,...

AI系统提示词:V0(ai代码提示)

以下是对V0系统提示词(SystemPrompt)的分部分讲解与解读,帮助你理解其核心内容和设计意图。V0系统提示词##CoreIdentity-Youarev0,Vercel&...

8岁男童失踪第13天,搜救人员发现可疑水库,更恶心的事情发生了

Lookingatyourrequest,Ineedtorewritethearticleaboutthe8-year-oldmissingboywhilemaking...

docker常用指令及安装rabbitMQ(docker安装zabbix)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

三步教你用Elasticsearch+PyMuPDF实现PDF大文件秒搜!

面对100页以上的大型PDF文件时,阅读和搜索往往效率低下。传统关系型数据库在处理此类数据时容易遇到性能瓶颈,而Elasticsearch凭借其强大的全文检索和分布式架构,成为理想解决方案。通过...

ElasticSearch中文分词插件(IK)安装

坚持原创,共同进步!请关注我,后续分享更精彩!!!前言ElasticSearch默认的分词插件对中文支持很不友好。一段话按规则会以每个中文字符来拆解,再分别建立倒排索引。如"中华人民共和国国歌...

SpringBoot使用ElasticSearch做文档对象的持久化存储?

ElasticSearch是一个基于Lucene的开源搜索引擎,广泛应用于日志分析、全文搜索、复杂查询等领域,在有些场景中使用ElasticSearch进行文档对象的持久化存储是一个很不错的选择...

Elasticsearch数据迁移方案(elasticsearch copyto)

前言最近小编要去给客户部署一套系统涉及到了Mysql和ES数据的迁移,下面就给大家分享一下ES数据迁移的几套方案,根据具体的使用场景来选择不同的迁移方案能使你事倍功半,话多说下面就一一介绍。Elast...

Rancher部署单体ElasticSearch(rancher2.5部署)

Rancher是k8s图形管理界面,之前曾有写文章介绍如何安装。ElasticSearch是热门搜索引擎,很多地方都有用到,常规安装部署略显繁琐,本文介绍在k8s下用rancher简易部署ES。1.在...

Elasticsearch在Java项目的搜索实践:从零开始构建高效搜索系统

Elasticsearch在Java项目中的搜索实践:从零开始构建高效搜索系统在现代的Java项目中,数据量激增,传统的数据库查询方式已经无法满足快速检索的需求。这时,Elasticsearch(E...

小白入门-Kibana安装(kibana安装配置)

一Kibana基础1.1介绍Kibana是一款免费且开放的前端应用程序,其基础是ElasticStack,可以为Elasticsearch中索引的数据提供搜索和数据可视化功能。Kiban...

Docker上使用Elasticsearch,Logstash,Kibana

在对一个项目做性能测试时我需要处理我们web服务器的访问日志来分析当前用户的访问情况。因此,我想这是试用ELK的一个好机会。ELK栈首先要注意的是使用它是非常简单的。从决定使用ELK到在本机上搭一个...

取消回复欢迎 发表评论: