在实践中,我要启动一个容器:

docker run a8asd8f9asdf0


如果是这样,怎么办:

docker start


执行吗?

手册中写着


启动一个或多个停止的容器


评论

运行=创建+开始

我希望OP也包含“执行”

可能会有所帮助:chat.stackoverflow.com/transcript/76919

@MonicaHeddneck有码头工人执行吗?

如果您之前已停止了该容器,则可以对容器使用start。如果您已经删除了该图像的容器,则可以使用“运行到图像”。我认为这是基本用法。

#1 楼

这是一个非常重要的问题,答案很简单,但是很基本:运行:创建一个新的图像容器,并执行该容器。您可以创建同一图像的N个克隆。命令为:
docker run IMAGE_ID而不是docker run CONTAINER_ID





开始:启动以前停止的容器。例如,如果您使用命令docker stop CONTAINER_ID停止了数据库,则可以使用命令docker start CONTAINER_ID重新启动同一容器,数据和设置将相同。



评论


是否需要为已停止的容器创建卷以使数据持久化?

– Logan Phillips
19 Mar 20 '19在4:55

@LoganPhillips写入容器默认联合文件系统层的文件和写入卷的文件之间的生命周期差异是:删除容器时,容器的联合文件系统层数据始终会丢失(docker rm container_id)。另一方面,除非在命令行上显式提供了-v选项,否则卷数据将在容器删除后仍然存在。可以直接检查主机系统上的卷位置。看这篇文章

– Stphane
19年5月11日在22:46



关于进程,需要和运行命令行的末尾?我需要这项服务(24小时)

– Peter Krauss
19年11月14日23:54



那么“ docker create”的目的是什么?如何/何时使用?

–约瑟夫·加格农
20年1月28日在19:41

当您执行docker运行hello-world时,它会显示“来自Docker的Hello!”。但是当您通过docker创建一个容器时,请创建hello-world并启动该容器,但不会输出该输出。那里发生了什么事?

–沙米氏菌Thenuwara
20年7月31日在19:46

#2 楼



run运行图像


start启动容器。

docker run文档确实提到:

docker run命令首先在指定的图像上创建一个可写的容器层,然后使用指定的命令启动它。
即,docker run等效于API /containers/create,然后等于/containers/(id)/start

您不运行现有容器,而是对其执行docker exec(自docker 1.3起)。
您可以重新启动已退出的容器。

评论


@Tarik不需要为交互过程添加-i到docker run吗?我的意思是,docker run需要一个图像来运行容器。

–VonC
16年11月18日在21:22

似乎有人可以写出更详尽的回应。答案看起来不太解释。

– qartal
17年3月2日,1:11

对我来说,下一个问题是容器和图像之间的区别stackoverflow.com/questions/21498832/…

– Alex Punnen
17-3-22在11:11



#3 楼

举例说明:

考虑您的计算机中有一个游戏(iso)图像。

当您run(将映像安装为虚拟驱动器)时,将创建一个虚拟驱动器,其中所有游戏内容都在虚拟驱动器中,并且自动启动游戏安装文件。 [运行docker映像-创建一个容器,然后启动它。]

但是当您stop(类似于docker stop)时,虚拟驱动器仍然存在,但会停止所有进程。 [由于容器存在,直到被删除]

执行start(类似于docker start)时,游戏文件从虚拟驱动器开始执行。 [启动现有容器]

在此示例中-游戏映像是您的Docker映像,虚拟驱动器是您的容器。

评论


当您执行docker运行hello-world时,它会从Docker打印Hello!但是,当您通过执行docker创建hello-world来创建容器,然后通过执行docker start 27c833038489来启动容器时,它不会输出该输出。那里发生了什么事?

–沙米氏菌Thenuwara
20年7月31日在19:47

#4 楼

daniele3004的答案已经非常不错。

对于像我这样不时混淆runstart的人来说,这只是一个快速而肮脏的公式:

docker run [...] = docker pull [...] + docker start [...]

评论


这不是真的。根据官方文档,“ ... docker run相当于API / containers / create then / containers /(id)/ start。(来源:docs.docker.com/engine/reference/commandline/run)

–sshh
19-10-16在2:30



#5 楼

run命令从映像创建一个容器,然后在该容器上启动根进程。使用run --rm标志运行它可以为您省去事后删除无用的死容器的麻烦,并让您完全忽略docker startdocker remove的存在。



run命令做一些不同的事情:

docker run --name dname image_name bash -c "whoami"



从图像创建容器。此时,容器将具有一个ID,如果有名称,则可能具有一个名称,将显示在docker ps中。

启动/执行容器的根进程。在上面的代码中,将执行bash -c "whoami"。如果在没有命令执行容器的情况下运行docker run --name dname image_name,则会立即进入停止状态。
根进程完成后,容器将停止。在这一点上,它几乎没有用。一个人不能再执行任何操作或使该容器复活。基本上有两种退出停止状态的方法:从停止的容器中删除容器或创建检查点(即映像)以运行其他内容。必须先运行docker remove,然后才能以相同的名称启动容器。

一旦容器自动停止,如何将其移除?在--rm命令中添加run标志:

docker run --rm --name dname image_name bash -c "whoami"


如何在单个容器中执行多个命令?通过防止该根进程死亡。这可以通过在--detached标志开始时运行一些无用的命令,然后使用“ execute”运行实际命令来完成:

docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"


为什么我们需要docker stop?要停止我们在上一片段中使用无尽命令tail -f /dev/null启动的挥之不去的容器。

#6 楼

运行-使用图像创建容器并启动相同的容器。 (创建并启动)

start-在处于停止状态的docker列表中启动容器。