本文主要介绍了一个重启所有停止的docker容器 *** 作的命令,有很好的参考价值。希望对大家有帮助。来和边肖一起看看吧。
一个命令重新启动所有停止的docker容器。
dockerps-a|grep已退出
查看所有停止的集装箱。
dockerps-a|grep已退出|awk“{print$1}”
获取停止的容器的ID
dockerPS-a|grepExited|awk“{print$1}”|xargsdockerstart
将所获得的停止集装箱的ID发送到集装箱启动命令。
一个命令停止所有正在运行的docker容器。
dockerPS-a|grepUp|awk“{print$1}”|xargsdockerstop
补充知识:Docker学习笔记:拿到镜子&启动容器&停止容器
拿镜子
默认情况下,使用dockerpull命令,将从官方DockerHub库中本地提取图像。
首先,介绍这个命令的格式:
dockerpull[选项]<;仓库名称>::<标签>:
其中包括:
Dockerpull:Docker拉镜像的命令关键字;
【选项】:命令选项;
仓库名称:仓库名称的格式一般为:/<;软件名称>:。对于DockerHub,如果没有指定用户名,默认为library,即官方镜像;
标签:标签是区分一面镜子不同版本的重要参数。<仓库名称>::<Label>:镜像将被唯一标识。默认为最新。
比如我们想从DockerHub官方仓库拉一个Ubuntu14.04的官方镜像,其声明如下:
dockerpullubuntu:14.04
dockerpull命令背后的工作
第一,如果标签值为空,即没有指定标签,则使用默认标签,即最新的标签;如果标记值不是空,将使用指定的标记。
然后,默认情况下,它会在DockerHub中查找名为“repoName”的仓库。如果仓库不存在,它将返回一条错误消息。如果仓库存在,从仓库中提取相应标记的镜像。例如,如果您执行dockerpullubuntu:14.04,标签为14.04的图像将从“ubuntu”存储库中拉出,而如果您执行dockerpullubuntu,标签为latest的图像将从“ubuntu”存储库中拉出。
(DockerHub里有很多图片库。通常,相同类型的图像将被放置在相同的存储库中。例如,一个ubuntu库由许多ubuntu映像组成,包括ubuntu:14.04、ubuntu:16.04、ubuntu:latest等等)。
最后,将拉出的图像存储在本地指定的位置。
设置镜像加速
由于“长城”的原因,在中国从DockerHub拉取图片的速度可能会比较慢。国内很多云服务商都提供图片加速服务,比如阿里、网易等等。
以Linux系统下阿里云加速的配置为例。只需将以下命令复制到Linux的终端,以root用户身份执行后,就成功配置了阿里云加速!
#以root用户身份执行以下 *** 作
mkdir-p/etc/docker tee/etc/docker/daemon.json<<-'EOF' {#下面的URL可以替换为你自己的阿里云加速地址 "registry-mirrors":["https://jxus37ad.mirror.aliyuncs.com"] } EOF systemctldaemon-reload systemctlrestartdocker启动容器
拉完镜像后,运行环境就为容器准备好了。
有两种方法可以启动容器,一种是基于映像创建一个新的容器并启动它,另一种是重新启动已停止的容器。
第一种方法:创建一个新的并启动它
dockerrun命令基于指定的映像创建一个容器并启动它。dockerrun的基本语法如下:
Docker运行[选项]映像名称[命令][参数]
其中包括:
Dockerrun:Docker创建并启动容器的命令关键字;
选项:命令选项,最常用的包括-d在后台运行容器并返回容器ID,-i在交互模式下运行容器,-t为容器分配一个虚拟输入终端,以及-name指定启动容器的名称。有关更多选项,请参考Docker帮助文档;
图像名称:以::<Label>:指定的方式;
命令:设置启动命令,在容器启动后执行;
ARG:其他一些参数。
dockerrun背后的工作
Docker在后台运行的标准 *** 作包括:
检查指定的镜像在本地是否存在,如果不存在,下载并从公共仓库启动;
创建并启动一个带有镜像的容器;
分配一个文件系统,在只读镜像层外挂载一个可读写层;
将虚拟接口从由主机配置的桥接接口桥接到容器;
配置从地址池到容器的ip地址;
执行用户指定的启动命令;
执行后,容器被终止。
docker运行实例一
并且用ubuntu运行环境启动一个容器,输出hellodocker。
只需要一个命令:docker运行Ubuntu:14.04echo‘hellodocker’,问题就解决了。
首先,由于本地没有ubuntu:14.04镜像,先从DockerHub下载镜像;(其实就是先执行dockerpullubuntu:14.04)
然后,在下载图像之后,使用该图像来创建它。由于一个ubuntu镜像包含了一个ubuntu系统的所有内容,镜像启动后,ubuntu的运行环境就在容器中了。
容器启动后,执行echo'hellodocker'启动命令,执行启动命令后终止容器。
docker运行实例2
创建并启动一个包含ubuntu运行环境的容器。该容器被称为firstContainer,一个终端被分配给该容器以与用户进行交互。
其中-i选项告诉Docker保持标准iostream对容器开放,-t选项让Docker分配一个伪tty并绑定到容器的标准输入。–name设置容器的容器名称。
请注意,dockerrun创建了一个新容器并启动了它,因此该命令创建的容器与前一个实例创建的容器不同。而且由于本地已经存在ubuntu:latest镜像,所以不需要再次从DockerHub下载,而是直接使用本地的ubuntu:latest镜像来构建容器。
启动容器后,我们进入容器内部,并在终端与容器进行交互。我们可以根据左边的命令提示判断我们是否在容器内部。比如上面的例子,当左边的命令提示符是root@localhost时,说明我们在容器外部,当命令提示符是root@fe263c9359dd/时,说明我们在容器内部,容器的ID是fe263c9359dd。我们可以通过exit退出当前容器。
第二种方式:启动一个终止的容器
虽然Docker容器非常轻量级,但这意味着一般情况下,我们会在启动容器并完成 *** 作后删除容器。但是有时候我们会进入之前创建的容器,dockerrun每次都会创建一个新的容器,这显然不符合我们的需求。在这种情况下,您可以使用dockerstart命令启动带有容器名或容器id的终止容器。
停靠开始[选项]容器[容器2...]
其中包括:
Dockerstart:Docker命令关键字,用于Docker启动容器;
选项:命令选项;
容器:需要启动的容器。该容器由“容器ID”或“容器名称”表示。如果指定了多个容器,将启动所有这些容器。
假设一个名为firstContainer的容器处于终止状态,现在需要启动它。可以这样做:执行dockerstartfirstContainer。命令执行后,尝试启动第一个容器,执行容器的启动命令。
但是如果你想启动第一个实例创建的容器,你不知道容器的名字(因为我没有指定)或者它的id。我该怎么办?
查看容器信息
Docker中有这样一个命令,dockerps,可以查看容器的信息,包括容器ID,基本镜像,启动命令,创建时间,当前状态,端口号,容器名称。
如果不添加任何参数,只执行dockerps,就会显示所有正在运行的容器。比如执行dockerps,如下图所示。在当前的Docker环境中,只有一个正在运行的容器,firstContainerId是fe263c9359dd。基于ubuntu:最新镜像,启动命令为“/bin/bash”。它是在2分钟前创建的,它的当前状态是“Up2minutes”,这意味着它已经运行了2分钟。容器名称是:。
如果您命令DockerPS–a,您可以查看Docker环境中的所有容器,包括那些已经停止的容器。执行DockerPS–A后,如下图所示:除了名为firstContainer的容器外,还可以看到一个id为ee826f1d58ff的容器container(容器id是随机生成的)。但是这个容器的当前状态是3分钟前退出(0),这意味着它处于终止状态,并且是3分钟前退出的。
对于这个终止的容器,可以通过dockerstartee826f1d58ff或者dockerstartg\fracious_lewin来启动。
其实用dockerstartee826f1d58ff启动第一个实例的容器,然后用dockerps查看,容器是不会可见的。也就是说,当dockerps被执行时,容器Id为ee826f1d58ff的容器不处于运行状态,而是处于终止状态。
dockers的执行结果如下:容器Id为ee826f1d58ff的容器当前状态为existing(0)2秒前!!!这意味着ee826f1d58ff容器确实处于终止状态,但它在2秒前退出。注意是2秒前!这表明容器在2秒钟前启动,但由于某种原因,容器被终止!!
实际上,执行dockerstartee826f1d58ff来启动容器id为ee826f1d58ff的容器!!但是执行start命令后,容器会立即结束。
停止容器
使用停靠站停止集装箱。
停靠站可用于终止正在运行的集装箱。其命令格式如下:
停靠站[选项]容器[容器...]
其中包括:
Dockerstop:Docker的Docker命令关键字,用于停止容器;
选项:命令选项,其中-t指定等待的秒数。如果容器没有被终止,它将被强制停止。默认时间为10秒。
容器:需要启动的容器。该容器由“容器ID”或“容器名称”表示。如果指定了多个容器,将启动所有这些容器。
例如,如果您想停止一个名为firstContainer的容器,可以像这样执行dockerstopfirstContainer。命令执行后,第一个容器将被终止。可以使用DockerPS–a查看终止的容器。
在实践中,执行dockerstop可能不会立即终止容器,但需要一段时间。
容器实际上是一个过程。在dockerstop被执行后,一个SIGTERM信号将被发送到容器的主进程,这将让主进程释放资源节省状态,并尝试终止自身。但是,当等待时间超过-t设置的时间时,会向容器的主进程发送SIGKILL信号,容器会立即终止。
什么情况下容器启动后会立即终止?
实际上,除了使用dockerstop命令强制终止一个容器之外,当容器的启动命令终止时,容器也会自动终止。
以Docker运行名测试容器Ubuntuecho‘helloDocker’为例。Echo'HelloDocker'是这个容器的启动命令。实际上,执行完这个命令后,执行dockerps-a,可以发现testcontainer容器处于终止状态,如下图所示:
[root@localhostDesktop]#dockerrun--nametestcontainerubuntuecho'hellodocker' hellodocker [root@localhostDesktop]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES da14116bf641ubuntu"echo'hellodocker'"6secondsagoExited(0)4secondsagotestcontainer当容器启动时,将执行容器的启动命令。执行上述命令创建并启动容器后,由于启动命令echo'hellodocker'将立即执行,容器将被终止,因此使用dockerps-a检查容器的状态是终止状态。
Docker容器是一个进程,实际上是以sh为主进程。如果主进程停止,容器也会停止。但是如果执行了容器的“开始命令”,主进程就会因为没有命令继续执行而停止,容器也会停止。
容器启动后如何不立即终止?
如果容器的sh主进程不停止,你觉得这个容器不会停止吗?答案是肯定的。所以如果启动命令不能完全执行,或者执行完启动命令后容器的sh主进程没有停止,那么容器启动后不会立即终止!
这里有两个例子可以让容器在启动后不立即停止:
将启动命令设置为无限循环。
dockerrunubuntu:14.04/bin/sh-c"而true做echohelloworld睡眠1;完成”
如果为真,此命令将执行/bin/sh-c"做echohelloworld睡眠1;Done”,因为这个命令永远不会结束,除非强行终止,否则容器的主进程sh不会停止,所以容器不会停止。但如果这样做,就无法正常 *** 作容器,而且会占用资源,所以在实际工作中意义不大。
将start命令设置为“启动已经运行的子进程”
dockerrun-namefirst_container-itUbuntu/bin/bash
执行这个命令后,容器创建启动后,执行/bin/bash,就会启动一个子进程。此时父进程(即容器的主进程sh)将进入睡眠状态,由于睡眠状态不是终止状态,容器将继续运行。
为什么在容器中输入exit或执行ctrlD后会终止容器?这是因为exit会退出(结束)当前进程,也就是/bin/bash。当子进程结束时,sh主进程返回到运行状态。但是,由于没有继续执行的命令,sh主进程被绑定,因此容器被终止。
上面重启所有停止的docker容器 *** 作的命令是边肖共享的所有内容。希望给大家一个参考,多多支持我们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)