如何继续退出的Docker容器


263

考虑:

docker run -it centos /bin/bash

我按Ctrl+ D退出。

我想继续运行此容器,但发现不能。

唯一的方法是

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

我对吗?有没有更好的方法?(我正在使用docker 0.8.0。)


1
您是否尝试为容器分配一个名称,并使用该名称进行控制?顺便说一句,“退出”,您的意思是脱离它,对吧?
埃里克·普拉顿

12
Docker 用于编程的工具,至少我是这样使用的。如果大多数人不同意,那么有人应该告诉Docker不要指向StackOverflow作为提问的地方。我确定这不是第一个类似“ DevOps”的问题,它可能在这里出现,也可能在SuperUser中出现。
Ted M. Young

5
Docker是一个开发人员工具。这里已经是'docker'标签。因此,我认为在stackoverflow中进行询问是适当的。我用它来构建需要从干净的环境中构建的映像。
Daniel YC Lin

6
我希望将其标记为“脱题”的人们解释原因!
jpetazzo 2014年

Answers:


291

您可以在现有容器退出后重新启动,并且所做的更改仍然存在。

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin

3
简而言之: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin

7
为了简短的一行:docker start -i $(docker ps -q -l)。;-)命名可以帮助更好地控制选择哪个容器。-l得到最后一个,确定...
Eric Platon 2014年

103
对于那些不熟悉Linux的人来说,这`docker ps -q -l`是一个扩展。将使用创建的最后一个(-l)docker容器的ID替换它。-q仅抑制通常由输出的其他信息(床头ID) `docker ps`。---- 注意: 反引号不是引号,它具有非常特殊的含义。你反引号之间键入的所有内容进行评估(执行)由壳主指令之前- unix.stackexchange.com/questions/27428/...
bnieland

1
我发现容器进入一种状态Created...,无法从中启动docker start ...。但是,可以使用docker restart ...
Voltaire

2
注意:-l仅获取“最新”泊坞窗。如果您像我一样,并且docker ps -a显示了需要启动的多个功能,则可以通过将上面的命令更改为来重新启动其中的“全部”(-a)docker start `docker ps -q -a`-q只是使其“安静”(而不是输出日志记录)。
摇滚李

148
docker start -a -i `docker ps -q -l`

说明:

docker start启动容器(需要名称或ID)
-a附加到容器
-i交互模式
docker ps列出容器
-q仅列出容器ID
-l仅列出最后创建的容器


docker ps -q -l,即使处于启动状态,它也会给出最后创建的容器ID。
Dharmang

什么是所谓的“附加”到容器?“附上”?
6

49

用:

docker start $(docker ps -a -q --filter "status=exited")

这将启动所有处于退出状态的容器。

docker exec -it <container-id> /bin/bash

这将连接到特定的容器。


2
我发现这是唯一为我工作的人。docker exec -it <container id> /bin/bash(或只是bash)。
barlop

这对我有用,但是因为我有两个容器,所以我不得不运行两次。因此,如果第一个启动并且第二个出现错误。只需再次点击相同的命令,它应该启动下一个容器。
Andrija J Fourkidney,

20

如果要使用多个易于记忆的命令进行操作:

  1. 列出停止的容器:

docker ps -a

  1. 复制您要附加的容器的名称或容器ID,并使用以下命令启动容器:

docker start -i <name/id>

-i标志告诉docker附加到容器的stdin。

如果容器不是以要连接的交互式外壳启动的,则需要执行以下操作来运行外壳:

docker start <name/id>
docker exec -it <name/id> /bin/sh

/bin/sh通常可与基于高山图像的壳。


答案被低估了,这帮助我找到了我要寻找的容器,比该问题的“答案”容易得多。
nicholas labrecque

3
Error response from daemon: Container <id> is not running
Cerin

14

如果要精确地继续使用一个已知名称的Docker容器:

docker start  `docker ps -a -q --filter "name=elas"`

1
谢谢@Nelson,这对我启动特定泊坞窗非常有帮助
SACHIN CHAVAN

在这种情况下,您可以docker start <name>在<name>是容器名称的地方运行。至少使用docker v19.03.8
Don Foumare

13

跟着这些步骤:

  1. 在以下命令中运行,以查看所有容器服务都在运行和停止。可以选择-a看到容器也停止

    docker ps -a
    
  2. 然后通过container_id或容器标签名称启动Docker容器

    docker start <CONTAINER_ID> or <NAMES>
    

    在此处输入图片说明

    从上图说,容器ID为4b161b302337,
    因此要运行的命令是

    docker start 4b161b302337
    
  3. 可以验证容器是否正在运行

    docker ps
    

9

如果您有一个命名容器,则可以通过运行来启动它

docker container start container_name

其中container_name是创建容器时必须提供的容器名称。如果container_name未命名容器,则可以用容器ID 替换。可以通过运行以下命令找到容器ID:

docker ps -a

5

这些命令适用于任何容器(不仅是最后一个退出的容器)。即使您的系统重新启动后,这种方式仍然可以使用。为此,这些命令将使用“容器ID”。

脚步:

  1. 使用此命令列出所有docker,并记下要重新启动的容器的容器ID: docker ps -a

  2. 使用容器ID启动容器: docker start <container_id>

  3. 附加并运行容器: docker attach <container_id>

注意:适用于linux


1

按名字

sudo docker start bob_the_container

或按ID

sudo docker start aa3f365f0f4e

这将重新启动已停止的容器,使用-i附加容器的STDIN或代替-i可以附加到容器会话(如果使用-it运行)

sudo docker attach bob_the_container

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.