pid=1
的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。docker容器之后台运行
我们 docker run 启动容器的时候,常需要将其在后台运行,通常我们设置参数 -d 即可。
但后台运行,其实是有前提的,如果没有前台进程,那么实际运行完docker run命令后,会处于退出状态,即exited。
例子:
docker run -d --name my-redis redis bash
# 指定命令是bash,但显然bash在容器起来后,很快就会结束,导致没有前台进程,故容器处于退出状态
目前了解的可以使用以下3种方法,具体用哪种方法,依据实际情况,生产情况下,通常用docker-compose
结合具体cmd
作为容器初起的命令。
docker run -d --name my-redis redis sleep 99999999999999
命令执行后,通过docker ps -a | grep my-redis
,可以看到容器处于运行状态,即up
。
docker run -it --name my-redis redis bash
之后会进入容器,如果想保持容器后台运行,我们可以 Ctrl + p + q
,再次查看容器运行状态,也可以看到容器处于up
状态。
docker run -itd --name my-redis2 redis bash
# -i 不是必需,加了,容器起来后终端返回容器ID
刚也提到,就是-d
运行容器时,需要有前台进程,-t
提供一个伪终端,类似前台进程,查看容器运行状态,也可以看到,容器处于up
状态。
docker提供了多种进入容器的方法,这里补充4种常见的方法:
docker attach
docker attach 容器ID|容器name
使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作,建议开发时使用。
ssh 在镜像(或容器)中安装SSH Server,这样就能保证多人进入,不建议使用,具体见为什么不需要在 Docker 容器中运行 sshd
nsenter nsenter使用方法
docker exec-推荐使用
通常我们可以通过容器name
或容器ID
进入到容器中:
-name
选项,我们可以:docker exec -it container_name bash
docker ps
查看容器的ID,之后再通过docker exec -it containerID bash
进入容器原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。