docker容器后台不成功


-d不行,-dit可以,为什么呢?有指点下吗mac
已邀请:

云龙云 - Agile, DevOps

赞同来自: anoyi


使用后台模式运行的容器,要看当前容器运行的进程状态。如果运行的进程停止了,容器也会自动停止。与mac无关。

为什么-d不行,-dit可以?

先说一下几个参数的含义:
-d、--detach=false 以后台模式运行命令
-i、--interactive=false 开启标准输入,即使未与容器连接,也维持标准输入
-t、--tty=false 使用TTY模式(pseudo-TTY)若要使用bash,则必须设置该选项。若不设置该选项,则虽然输入命令,但不显示shell


就拿/bin/sh来具体举个例子:

例子1:没有任何参数
$ docker run busybox /bin/sh

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
d9c879d93b40        busybox             "/bin/sh"           8 seconds ago       Exited (0) 7 seconds ago                       loving_mestorf


因为sh需要用户输入命令,但是当前容器并没有开启标准输入,sh所以会退出,容器直接退出。

例子2:只使用-i开启标准输入
$ docker run -i busybox /bin/sh
echo hello
hello
exit


只使用-i参数,开启标准输入所以你可以和容器进行交互,但是因为没有tty所以不会显示shell。

例子3:只使用-it开启标准输入和tty
$ docker run -it busybox /bin/sh
/ #
/ # echo hello
hello
exit


例子4: 只使用-d后台运行
$ docker run -d busybox /bin/sh
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b8f2cca234cc        busybox             "/bin/sh"           4 seconds ago       Exited (0) 2 seconds ago                       wonderful_bardeen


因为只使用了后台模式,但是没有-i,所以当没有和容器链接时,不会维持标准输入,sh退出,容器直接退出。

例子5:使用-itd开启标准输入和tty并且后台运行
$ docker run -d -it busybox /bin/sh 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4b4756f668c3        busybox             "/bin/sh"           4 seconds ago       Up 3 seconds                            practical_davinci


因为-i的存在,所以即使未与容器连接,也维持标准输入,sh持续运行。

要回复问题请先登录注册