为什么有些容器在docker run的时候需要接 -it ,有些不需要?
Posted 那一千七百二十九只鹤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么有些容器在docker run的时候需要接 -it ,有些不需要?相关的知识,希望对你有一定的参考价值。
原因:因为像centos、ubuntu等这些系统镜像起的容器都会启动时执行bash这个命令,进入后台运行,被daokcer认为是不活跃的容器进程,就会关闭容器,这样我们docker ps的时候就会发现容器没有起来。
刨析:
我们以制作镜像的角度解释为什么起容器的时候会执行bash这个命令
制作镜像的时候都会需要一个Dockerfile文件
这是Dockerfile文件内容
#base镜像
FROM busybox
#设置环境变量
ENV sg WANG
#启动容器时执行的命令我们,首先执行/bin/sh这个解释器,再sleep 120秒
CMD ["/bin/sh", "-c", "echo wangwenlong;sleep 120;echo ok"]
生成一个基于base镜像busybox的镜像
[root@localhost busybox]# docker build -t busybox .
创建并运行一个容器
[root@localhost busybox]# docker run -d --name w-busybox busybox
查看该容器是否运行
[root@localhost busybox]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
596f2753e6b5 busybox "/bin/sh -c \'echo wa…" 2 seconds ago Up 1 second w-busybox
查看该容器中运行的进程
[root@localhost busybox]# docker top w-busybox
UID PID PPID C STIME TTY TIME CMD
root 10382 10363 1 18:09 ? 00:00:00 /bin/sh -c echo wangwenlong;sleep 120;echo ok
root 10412 10382 0 18:09 ? 00:00:00 sleep 120
120秒后
再次查看该容器会发现该容器已经停止运行
[root@localhost busybox]# docker top w-busybox
Error response from daemon: Container 596f2753e6b500ce05638995af11c8aae6151615f9a70c2fbbbc79a43c47c3f6 is not running
以上内容都说明了如果build的那个镜像的Dockerfile文件有
CMD ["解释器"]
一般都是linux系统作为镜像的时候会有上面这个
我们就要使用以下进行创建运行容器的命令
[root@localhost busybox]# docker run -it
该容器便可以运行起来而不会被docker关闭,因为bash模式下会进入后台运行,docker认为这是个不活跃的容器进程,就会关闭该容器
以上是关于为什么有些容器在docker run的时候需要接 -it ,有些不需要?的主要内容,如果未能解决你的问题,请参考以下文章