运行模式

后台运行(分离模式)

-d 或者 -d=true

  • 命令执行完会输出新的容器ID。如果结合 --rm 属性,则在容器停止后或者容器的主进程结束后会删除此容器

  • 注意:不能将 service x start 或者 systemctl 命令交给分离模式的容器。因为是后台运行的进程,会导致进程一启动完容器就认为工作完了会停止当前容器

    确切的说是容器是后台运行,但是容器内必须有在前台运行的程序才行,除非执行的程序是一次性的,执行完成后容器就会处于exited状态。

    解决方法:-td命令结合使用,-t 提供一个伪终端,类似前台进程就可以保证容器不会停止

  • 如果容器需要运行很多后台程序和一个前台程序,请一定要把前台程序放在最后,因为启动了前台程序之后会被阻塞,其后的后台程序也不会执行

前台运行

-d=false 或者不写

前台运行可以在容器中启动进程并将控制台附加到进程的标准输入、输出和标准错误。它甚至可以伪装成 TTY(这是大多数命令行可执行文件所期望的)并传递信号

参数 说明
-a=[] 可选值 STDIN 、STDOUT 、STDERR 。支持选择多个, 如果未指定,则默认附加 STDOUT 、STDERR
-t 附加虚拟终端
-i 即使没有连接,也保持STDIN打开
–sig-proxy=true 代理接收到进程的所有信号(仅限非tty模式)

对于交互式进程(如shell),必须同时使用-i -t来为容器进程分配tty。

-i -t通常写成-it。当客户端从管道接收其标准输入时,禁止指定-t

示例:

1
echo test | docker run -i busybox cat