Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app)。
在Docker中,当我们使用docker exec -it [container_name] /bin/bash
命令进入一个正在运行的容器时,如果想要退出这个容器,我们通常会使用exit
命令或者按Ctrl + D
,这个操作会结束容器的进程,导致容器被停止,如何实现退出容器但不关闭容器呢?
实际上,Docker已经为我们提供了一种方式来实现这个需求,那就是使用docker exec -it -e TTY=off [container_name] /bin/bash
命令,通过将TTY设置为off,我们可以避免为容器分配一个伪终端,这样当我们退出容器时,容器并不会被停止。
这种方式有一个限制,那就是我们无法在容器内部看到任何输出,因为TTY被关闭了,所以容器的标准输出和标准错误输出都无法被显示出来。
除了上述方法外,我们还可以使用docker attach
命令来保持容器运行。docker attach
命令可以让我们在不停止容器的情况下退出容器的shell,具体操作如下:
1、使用docker exec -it [container_name] /bin/bash
命令进入容器。
2、在容器内部启动一个后台进程,sleep 10000
。
3、使用Ctrl + P
和Ctrl + Q
将容器的shell放到后台运行。
4、使用docker attach [container_name]
命令连接到容器。
5、在容器内部执行你想要的操作。
6、当你退出容器的shell时,容器并不会被停止,因为后台进程仍然在运行。
需要注意的是,使用docker attach
命令连接到容器时,如果容器内部有多个进程在运行,那么Docker可能会将你连接到错误的进程,为了避免这种情况,你可以在启动容器时使用--exec-opt native.cgroupdriver=systemd
参数来让Docker使用systemd作为cgroup驱动器,这样就可以保证你连接到正确的进程。
Docker为我们提供了多种方式来实现退出容器但不关闭容器的需求,我们可以根据实际情况选择最适合自己的方式来使用。
评论前必须登录!
注册