docker容器之后台运⾏container容器用法
我们docker run启动容器的时候,常需要将其在后台运⾏,通常我们设置参数-d即可。
但后台运⾏,其实是有前提的,如果没有前台进程,那么实际运⾏完docker run命令后,会处于退出状态,即exited。
例⼦:
docker run -d --name my-redis redis bash
# 指定命令是bash,但显然bash在容器起来后,很快就会结束,导致没有前台进程,故容器处于退出状态
Docker容器后台运⾏,必须有⼀个前台进程。容器运⾏的命令如果不是那些⼀直挂起的命令(⽐如运⾏ping,sleep),就是会⾃动退出的。
⽽上⾯的代码中bash就是需要执⾏的指定的命令。
命令如果执⾏完毕了,或者叫指定的应⽤终结时,容器会⾃动停⽌。
解决办法
⽬前了解的可以使⽤以下3种⽅法,具体⽤哪种⽅法,依据实际情况,⽣产情况下,通常⽤docker-compose结合具体cmd作为容器初起的命令。
1.指定挂起阻塞命令启动容器
docker run -d --name my-redis redis sleep 99999999999999
命令执⾏后,通过docker ps -a | grep my-redis,可以看到容器处于运⾏状态,即up。
2.使⽤交互界⾯后退出容器
docker run -it --name my-redis redis bash
之后会进⼊容器,如果想保持容器后台运⾏,我们可以Ctrl + p + q,再次查看容器运⾏状态,也可以看到容器处于up状态。
3.-td命令结合使⽤
docker run -itd --name my-redis2 redis bash
# -i 不是必需,加了,容器起来后终端返回容器ID
刚也提到,就是-d运⾏容器时,需要有前台进程,-t提供⼀个伪终端,类似前台进程,查看容器运⾏状态,也可以看到,容器处于up状态。补充-进⼊容器的4种⽅法
docker提供了多种进⼊容器的⽅法,这⾥补充4种常见的⽅法:
使⽤docker attach
使⽤SSH
使⽤nsenter
使⽤exec
docker attach
docker attach 容器ID|容器name
使⽤该命令有⼀个问题。当多个窗⼝同时使⽤该命令进⼊该容器时,所有的窗⼝都会同步显⽰。如果有⼀个窗⼝阻塞了,那么其他窗⼝也⽆法再进⾏操作,建议开发时使⽤。
ssh
在镜像(或容器)中安装SSH Server,这样就能保证多⼈进⼊,不建议使⽤,具体见
nsenter
docker exec-推荐使⽤
通常我们可以通过容器name或容器ID进⼊到容器中:
如果我们在启动容器的时候指定-name选项,我们可以:docker exec -it container_name bash
没指定name,我们可以通过docker ps查看容器的ID,之后再通过docker exec -it containerID bash进⼊容器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论