docker stop停止一个容器

学习停止一个正在运行的容器,要求学习者参照示例将正在运行的名为firstContainer的容器停止。

相关知识

使用docker stop停止一个容器

docker stop可以用来终止一个正在运行的容器。它的命令格式如下:

  1. docker stop [OPTIONS] Container [Container ...]

其中:

  • docker stop: Docker停止容器的命令关键词;
  • OPTIONS:命令选项,其中-t指定等待多少秒后如果容器还没终止,就强行停止,默认等待10秒;
  • Container:需要启动的容器,该容器用“容器ID”或“容器名”表示,如果指定了多个容器,那么就将这些容器都启动。

例如想要停止一个名为firstContainer 的容器,可以这么执行docker stop firstContainer。该命令执行完之后,firstContainer将会处于终止状态。而上一节我们谈到过,终止状态的容器,可以使用docker ps –a查看到。

实际工作中,执行docker stop可能并不会立即终止容器,而是需要等待一段时间。前面我们说过,容器实际上是一个进程。而执行docker stop之后,首先会向容器的主进程发送一个SIGTERM信号,让主进程释放资源保存状态,尝试自己终止。但当等待时间超过了-t设置的时间后,会向容器的主进程发送一个SIGKILL信号,使容器立即终止。

在什么情况下容器启动后会立即终止?

实际情况中,除了使用docker stop命令来强制地终止一个容器以外,当容器的启动命令终结时,容器也自动会终止。

docker run --name testcontainer ubuntu echo 'hello docker'为例,echo 'hello docker'就是该容器的启动命令。实际上执行完这条命令后,执行docker ps -a,可以发现testcontainer容器是处于终止状态的,如下图所示:

  1. [root@localhost Desktop]# docker run --name testcontainer ubuntu echo 'hello docker'
  2. hello docker
  3. [root@localhost Desktop]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. da14116bf641 ubuntu "echo 'hello docker'" 6 seconds ago Exited (0) 4 seconds ago testcontainer

前面我们说过,在容器启动时,会执行容器的启动命令。而执行上述命令创建并启动容器后,由于容器的启动命令echo 'hello docker'会立刻执行完毕,所以容器也随之终止,因此使用docker ps -a查看该容器的状态是终止状态。

现在你应该明白上一关中,为什么docker start ee826f1d58ff去启动第一个实例的容器,然后使用docker ps查看,会看不到该容器了吧?

之前我们介绍过Docker容器是一个进程,实际上它以sh作为主进程。如果主进程停止了,那么容器也就停止了。而如果容器的“启动命令”执行完之后,由于主进程没有命令继续执行,所以主进程会停止,容器也就因此而停止了。

如何才能使容器启动后不立即终止?

如果容器的sh主进程不停止,是不是以为这容器就不会停止?答案是肯定的。因此,如果使启动命令不能执行完毕,或者在执行完启动命令后,容器的sh主进程不停止,那么容器在启动后就不会立即终止了!

下面举两个能使容器启动后不立即停止的例子:

将启动命令设置为死循环

1. docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 这条命令在创建并启动容器之后,会执行/bin/sh -c "while true; do echo hello world; sleep 1; done",由于该命令永远都不会执行完毕,除非强行终止,所以容器的主进程sh不会停止,因此容器也将不会停止。但是这样的做的话,无法正常的操作容器,而且它会占据资源,所以这种做法在实际的工作中意义并不大。

将启动命令设置为“启动一直运行的子进程”

2. docker run --name first_container -it ubuntu /bin/bash

执行完这条命令后,创建并启动容器之后,执行/bin/bash,会启动一个子进程,此时父进程(也就是容器的主进程sh)会进入sleep状态,由于sleep状态不是终止状态,所以容器会继续运行。

为什么在容器中输入exit或者执行ctrl D后,容器将会终止呢,这是因为exit会退出(结束)当前进程,也就是/bin/bash,由于子进程结束,sh主进程恢复到运行态,然而由于没有命令需要继续执行,所以sh主进程结,因此容器终止。

任务要求

本关的编程任务是补全step4/stopcontainer.sh文件中的内容,要求停止一个正在运行的的容器。具体要求如下:

  • 将一个正在运行的名为“firstContainer”的容器停止;

本关涉及的代码文件step4/stopcontainer.sh的代码框架如下:
 

#!/bin/bash#注意如果想在右侧使用命令行模拟操作,请先输入#service docker start#否则将不能执行docker命令#以ubuntu镜像为基础,创建并在后台启动了一个名为firstContainer的容器(-d看不懂没关系,下一关会介绍的)#拉取ubutun 最新镜像,实际生产中,docker pull ubutun可以省略,docker run的时候会自己去拉取。docker pull ubuntudocker run -itd --name firstContainer ubuntu /bin/bash#将firstContainer容器停止!#********** Begin *********#docker stop firstContainer#********** End **********#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot家具商城系统

基于springboot家具商城系统 摘要 这个Spring Boot家具商城系统旨在通过现代化的Web应用程序技术提供一个全功能的电子商务平台。系统的核心实体是家具商品,通过RESTful API控制器提供对商品的增删改查等操作。这个系统使用了Spring Boot框架,借助其简便…

nn.TransformerEncoder的输出为NaN值的原因及解决方法

问题描述: 当使用nn.TransformerEncoder时,即如下情况: 实例化一个TransformerEncoder self.encoder_layer nn.TransformerEncoderLayer(d_modelencoder_in_dim, nheadencoder_head,dim_feedforwardencoder_ffnn_dim,batch_firstbatch_fir…

关于团队管理的一些思考

1、团队:为什么需要团队,一个人或者一群人不行吗,当一个项目需要的能力仅靠个人无法满足时,这时候就需要团队来完成,一群人和一个团队的主要区别就是团队有一个共同的目标,团队成员可以发挥自己的优势一起完…

06 C++中变量的作用域

系列文章目录 06 C中变量的作用域 目录 系列文章目录 文章目录 前言 一、局部变量 二、全局变量 三、块作用域变量 总结 前言 C中变量的作用域指的是变量可以被访问的范围,即变量在程序中存在的有效范围。不同作用域的变量具有不同的可见性和生命周期。 在…

Mac单独修改应用语言

方法1: 方法2: defaults write com.microsoft.Excel AppleLanguages ("zh-cn") defaults write com.microsoft.Word AppleLanguages ("zh-cn")参考:https://www.zhihu.com/question/24976020

红队攻防实战系列一之Cobalt Strike

他日若遂凌云志,敢笑黄巢不丈夫 本文首发于先知社区,原创作者即是本人 前言 在红队攻防中,需要我们拥有综合能力,不仅仅是web渗透的漏洞挖掘与利用,边界突破的方式有很多种,当然这需要我们拥有很强的意识…

【LeetCode】101. 对称二叉树

101. 对称二叉树 难度:简单 题目 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出&#…

图书管理系统源码,图书管理系统开发,图书借阅系统源码配置和运行图解源码已附加

目录 配置简介和软件条件 数据库附件配置 vs应用程序web.config配置数据库链接字符串 数据库文件脚本代码 配置简介和软件条件 所需要的软件是Vs2017以上数据库是Sqlserver2012以上,如果数据库附件不了可以使用数据库脚本附件数据库脚本会在文章末尾写出来。可以…

CG 运算符 流程控制

运算符 算数运算符 注意:取余运算只能作用于整数 加 减- 乘* 除/ 取余% 自增 自减--三目运算符 条件 ?条件真:条件假 例如:fixed a 4>5? 4:5; 逻辑运算符 && 逻辑与 || 逻辑或 注意:CG中的逻辑运算符…

ArkTS-页面转场动画

页面转场动画 在全局pageTransition方法内配置页面入场和页面退场时的自定义转场动效 两个页面间发生跳转,一个页面消失,另一个页面出现,这时可以配置各自页面的页面转场参数实现自定义的页面转场效果。页面转场效果写在pageTransition函数中…

【Python】获取ip

要使用Python获取IP地址,可以使用socket库中的gethostname()函数和gethostbyname()函数。 import socketdef get_ip_address():hostname socket.gethostname()ip_address socket.gethostbyname(hostname)return ip_addressip get_ip_address() print("IP地…

【BUG合集】(一)①数据库存1/0,请求结果返回true和false;②sql查数据库能查,但mybatis查为空;③data64图片存储为异常;

前言 最近,在工作上接手的任务中,各种 bug 问题出现,在解决的同时也可以记录一下。因此,觉得可以出个记录 bug 合集。方便后来者碰到类似情况,可以作为一个参考进行解决。 文章题目就包含当前文章内容中所遇到的三个 b…

用行云管家实现IT统一运维管理,提高运维效率

随着公司业务的不断壮大,需要用到的IT系统也越来越多,使用起来耗时耗力。因此实现IT统一运维管理已成为提高运维效率、降低成本、优化资源配置的重要途径。这里我们小编告诉您,用行云管家实现IT统一运维管理,提高运维效率&#xf…

目标检测——R-CNN算法解读

论文:Rich feature hierarchies for accurate object detection and semantic segmentation 作者:Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik 链接:https://arxiv.org/abs/1311.2524 代码:http://www.cs.berke…

VUE3+TS语法忽略、eslint忽略

typescript忽略 单行忽略 // ts-ignore忽略全文 // ts-nocheck取消忽略全文 // ts-checkeslint忽略typescript忽略 /* eslint-disable */ const watermark require("watermark-dom"); // ts-ignore /* eslint-enable */

高度自定义进度条实现完整代码附示意图

实现功能&#xff1a; 自定义一个进度条&#xff0c;能手动拖动进度条&#xff0c;也可以点击相应的进度&#xff0c;根据当前进度条的进度显示相应的内容。 效果图&#xff1a; 实现代码&#xff1a; 封装组件&#xff1a; <template><view class"boomBg&qu…

AIoT智能物联网平台技术架构参考

具体来说&#xff0c;AIoT平台能够实现智能终端设备之间、不同系统平台之间、不同应用场景之间的互融互通&#xff0c;进一步推动万物互联的进程。 AIoT智能物联网平台是结合了人工智能&#xff08;AI&#xff09;和物联网&#xff08;IoT&#xff09;技术的平台。它旨在通过物…

图像生成MaaS服务

小红书&#xff1a;http://www.qiyuai.net/apps/met/community/selected 美图&#xff1a;https://www.whee.com/ai/text-to-image 混元&#xff1a;小程序 微软&#xff1a;copilot DALLE3

达梦数据库使用

达梦数据库使用 &#x1f4d1;前言 本文主要是【达梦数据库】——达梦数据库简单使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他…

java中,不加public则类中的变量和方法public protected 默认访问权限会是什么样子的?

java中&#xff0c;不加public则类中的变量和方法public protected 默认访问权限会是什么样子的&#xff1f; 在Java中&#xff0c;如果不加访问修饰符&#xff08;public、protected、private&#xff09;来修饰类中的变量和方法&#xff0c;则它们的访问权限将是默认访问权限…