运行和启动Docker容器之间的区别

Difference between Running and Starting a Docker container

在实际操作中,我会:

1
docker run a8asd8f9asdf0

如果是这样的话,你会怎么做:

1
docker start

怎么办?

手册上写着

Start one or more stopped containers


这是一个非常重要的问题,答案很简单,但很基本:

  • 运行:创建图像的新容器,并执行该容器。可以创建同一图像的n个克隆。命令是:docker run IMAGE_ID而不是docker run CONTAINER_ID
  • enter image description here

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


    • run运行图像
    • start启动一个容器。

    docker run文件确实提到:

    The docker run command first creates a writeable container layer over the specified image, and then starts it using the specified command.

    That is, docker run is equivalent to the API /containers/create then /containers/(id)/start.

    您不运行现有的容器,而是对其执行Docker操作(从Docker 1.3开始)。您可以重新启动退出的容器。


    举例说明:

    假设您的计算机中有一个游戏(ISO)图像。

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

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

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

    在这个例子中,游戏图片是你的Docker图片,虚拟驱动器是你的容器。


    丹尼尔3004的回答已经很好了。

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

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