运行模式
后台运行(分离模式)
-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 |