Docker——退出而不关闭容器

一般情况下,进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢?

如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记!

以下示例为退出容器但不关闭容器

[root@localhost ~]# docker attach c600c4519fc8
[root@c600c4519fc8 /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
c600c4519fc8        centos              "/bin/bash"         3 hours ago         Exited (0) 1 second ago                       pensive_jackson
5a7a0d694651        busybox             "sh"                20 hours ago        Exited (0) 20 hours ago                       hungry_vaughan
4b0296d18849        hello-world         "/hello"            46 hours ago        Exited (0) 46 hours ago                       hopeful_yonath
[root@localhost ~]# docker start pensive_jackson
pensive_jackson
[root@localhost ~]# docker attach c600c4519fc8

Ctrl + P + Q 

[root@c600c4519fc8 /]# read escape sequence
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
c600c4519fc8        centos              "/bin/bash"         3 hours ago         Up 22 seconds                                 pensive_jackson
5a7a0d694651        busybox             "sh"                20 hours ago        Exited (0) 20 hours ago                       hungry_vaughan
4b0296d18849        hello-world         "/hello"            46 hours ago        Exited (0) 46 hours ago                       hopeful_yonath

事实上我们可以在启动容器的时候就进行配置,加入-d参数来启动容器,当然,这条命令仅限于启动全新的容器,启动关闭的容器是不可以的。

Tips 1
docker run -d: 后台运行容器,并返回容器ID

以下示例为使用docker -d启动容器并退出

[root@localhost ~]# docker run -i -t -d centos /bin/bash
8521b11d5d99535d4cb0080adc5a58a4dd018ecd0751d9945f7da7ab01bec330
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
8521b11d5d99        centos              "/bin/bash"         4 seconds ago       Up 4 seconds                                    eager_goldwasser
c600c4519fc8        centos              "/bin/bash"         3 hours ago         Exited (0) 28 seconds ago                       pensive_jackson
5a7a0d694651        busybox             "sh"                20 hours ago        Exited (0) 20 hours ago                         hungry_vaughan
4b0296d18849        hello-world         "/hello"            46 hours ago        Exited (0) 46 hours ago                         hopeful_yonath
[root@localhost ~]# docker attach 8
[root@8521b11d5d99 /]# uname -r
3.10.0-514.el7.x86_64
[root@8521b11d5d99 /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
8521b11d5d99        centos              "/bin/bash"         2 minutes ago       Exited (0) 2 seconds ago                       eager_goldwasser
c600c4519fc8        centos              "/bin/bash"         3 hours ago         Exited (0) 2 minutes ago                       pensive_jackson
5a7a0d694651        busybox             "sh"                20 hours ago        Exited (0) 20 hours ago                        hungry_vaughan
4b0296d18849        hello-world         "/hello"            46 hours ago        Exited (0) 46 hours ago                        hopeful_yonath

在这里你可能会发现,使用了-d的命令退出后容器依然还是死了,动手型的朋友可能会发现只是用docker run -d去启动容器也一样是死的
这里其实需要了解的是容器的运行机制,Docker容器在后台运行,必须要有一个前台进程,这里我们让容器有前台程序运行,就可以实现容器的-d 启动后存活

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
c600c4519fc8        centos              "/bin/bash"         3 hours ago         Exited (0) 4 minutes ago                       pensive_jackson
5a7a0d694651        busybox             "sh"                21 hours ago        Exited (0) 21 hours ago                        hungry_vaughan
4b0296d18849        hello-world         "/hello"            47 hours ago        Exited (0) 47 hours ago                        hopeful_yonath
[root@localhost ~]# docker run -d centos /bin/bash -c "nohup ping -i 1000 www.baidu.com"
8aa19c9604382bc019797ccda831ae1bcebd81d86380b6040d636e03000b440a
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
8aa19c960438        centos              "/bin/bash -c 'nohup…"   2 seconds ago       Up 2 seconds                                   adoring_wing
c600c4519fc8        centos              "/bin/bash"              3 hours ago         Exited (0) 5 minutes ago                       pensive_jackson
5a7a0d694651        busybox             "sh"                     21 hours ago        Exited (0) 21 hours ago                        hungry_vaughan
4b0296d18849        hello-world         "/hello"                 47 hours ago        Exited (0) 47 hours ago                        hopeful_yonath

我这里使用nohup在后台运行一个每1000秒ping一次百度的进程,另外你也可以使用"while true; do echo hello world; sleep 1; done",无限输出hello world。

另外即便是有进程在后台运行,你进入了容器,输入exit退出,依然会终止容器的运行,请谨记。

Ctrl+P+Q依然是我认为的最佳用法。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mac Docker退出容器不会自动关闭是因为Docker默认采用了后台运行的方式,即使用了守护进程来管理容器运行。这样,当退出容器时,守护进程会继续保持运行状态,导致容器不会自动关闭。 想要关闭容器,可以使用以下两种方法之一: 1. 使用`docker stop`命令手动关闭容器。在终端中运行`docker stop <容器ID或容器名称>`即可停止指定容器的运行。例如,`docker stop mycontainer`将停止名称为mycontainer的容器。 2. 使用`docker-compose down`命令关闭Docker Compose管理的容器。在项目的根目录下运行该命令可以关闭所有在该项目下运行的容器。如果只想关闭某一个服务的容器,可以在该命令后面加上服务名称,例如`docker-compose down <服务名称>`。 需要注意的是,以上两种方法都会停止容器,并释放相关的资源,但不会删除容器。如果需要删除容器,可以使用`docker rm`命令或者在使用`docker-compose`时加上`--volumes`选项。 总之,想要关闭Mac上的Docker容器,可以手动使用`docker stop`命令或者`docker-compose`命令,以确保容器能够正常停止并释放相关资源。 ### 回答2: 在使用Mac上的Docker时,退出容器并不会关闭容器。这是因为Docker对于容器的管理方式与常规的虚拟机不同。 在Docker中,容器是基于操作系统级别的虚拟化,它与主机共享内核和其他基本资源。因此,当我们退出容器时,只是从容器的运行环境中退出,并不会关闭容器本身。 要关闭容器,我们可以使用以下命令: 1. 使用`docker stop`命令来停止容器的运行。例如,`docker stop [CONTAINER_ID]`,其中`[CONTAINER_ID]`是容器的ID。 2. 使用`docker rm`命令来删除容器。例如,`docker rm [CONTAINER_ID]`,其中`[CONTAINER_ID]`是容器的ID。 3. 使用`docker-compose down`命令来关闭并删除由Docker Compose启动的容器。在docker-compose.yml文件所在的目录中执行该命令即可。 值得注意的是,退出容器并不会自动删除容器和其数据。如果需要重新启动容器并保留之前的数据,可以使用`docker start`命令来重新启动容器。 总之,退出容器只是退出容器的运行环境,并不会关闭容器本身。要关闭容器,我们需要使用特定的Docker命令来停止、删除或关闭并删除容器。 ### 回答3: 在Mac上,当我们在Docker容器中执行完命令后退出容器时,默认情况下并不会关闭容器。 这是因为Docker在Mac上使用的是Docker for Mac,它实际上是在Mac OS X上通过虚拟机技术运行的,虚拟机中运行了Docker守护进程。当我们退出容器时,Docker守护进程仍然在运行,因此容器也不会关闭。 如果我们希望在退出容器时自动关闭容器,可以使用"-rm"参数运行容器。例如,当我们使用以下命令运行一个容器时,容器会在退出时自动关闭: ``` docker run -rm -it <image>:<tag> ``` 这样当我们退出容器时,Docker会自动关闭并删除该容器。 另外,我们也可以手动关闭容器,使用命令"docker stop"加上容器的ID或名称。例如,我们可以使用以下命令关闭一个正在运行的容器: ``` docker stop <container_id_or_name> ``` 这样容器就会被关闭,并停止运行。 总的来说,在Mac上使用Docker时,默认情况下退出容器不会关闭容器。如果我们希望在退出时自动关闭容器,可以使用"-rm"参数运行容器,或者手动使用"docker stop"命令关闭容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值