Docker 容器后台运行和前台运行的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 容器后台运行和前台运行的区别相关的知识,希望对你有一定的参考价值。

Docker 容器后台运行和前台运行的区别
Posted by simapple on Tuesday, 19 August 2014
后台运行vs前台运行
当你启动一个docker 容器的时候,第一件事就是要确认你要在前台运行还是在后台运行:
-d=false:Detached mode:Run container in the background,printnew container id

后台运行 (-d)
后台运行直接指定 (-d=true or just -d),这样的话所有的操作类似网络连接,共享操作等等都不会再接受命令行的命令控制。你就要使用attach命令 来进入一个容器,再管理它,注意当你attach链接到一个容器的时候,你就不能再使用 rm 来删除这个容器。
前台运行
当你不指定-d时,就是在前台运行, docker run 可以启动一个进程,并且通过console 连接进程的标准输入 输出和标准错误。它甚至可以伪装成一个TTY,发送信号量。所有这一切都是可以配置的。
-a=[]:Attach to `STDIN`,`STDOUT`and/or`STDERR`-t=false:Allocate a pseudo-tty
--sig-proxy=true:Proxify all received signal to the process (even in non-tty mode)-i=false:Keep STDIN open even ifnot attached

如果你不想使用 -a 来连接容器的所有输入输出,那么你可以指定你希望接受的流STDIN, STDOUT, STDERR):
$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash

在交互式的情况下,你最希望得到一个类似TTY那样的shell,你可以 指定 -i -t
taxonomyextra:
docker
参考技术A 运行进程Docker容器:1、使用Shell脚本依启Kubernetes各组件即start-kubernetes.sh2、Dockerfilestart-kubernetes.sh指定Docker容器默认执行命令即3、需要注意点于start-kubernetes.sh脚本作Docker容器1号进程运行必须始终保持运行Docker容器仅1号进程运行保持运行换言Docker容器1号进程退Exited由于Kubernetes各组件都台进程式执行脚本末尾添加死循环保持start-kubernetes.sh脚本始终处于运行状态4、Supervisor进程管理工具需要编写supervisor配置文件kubernetes.conf:5、Kubernetes各组件启命令设command即autorestart参数设true意味着supervisor负责重启意外退组件stdout_logfilestderr_logfile参数则用于设置命令标准输文件标准错误输文件6、Dockerfilesupervisord指定Docker容器默认执行命令即:7、,supervisordDocker容器1号进程需要始终保持运行状态nodaemon设true表示supervisor保持前台运行非台运行若supervisor台运行则Docker容器执行supervisord命令立即Exited. 参考技术B Docker 容器后台运行和前台运行的区别
Posted by simapple on Tuesday, 19 August 2014
后台运行vs前台运行
当你启动一个docker 容器的时候,第一件事就是要确认你要在前台运行还是在后台运行:
-d=false:Detached mode:Run container in the background,printnew container id

后台运行 (-d)
后台运行直接指定 (-d=true or just -d),这样的话所有的操作类似网络连接,共享操作等等都不会再接受命令行的命令控制。你就要使用attach命令 来进入一个容器,再管理它,注意当你attach链接到一个容器的时候,你就不能再使用 rm 来删除这个容器。
前台运行
当你不指定-d时,就是在前台运行, docker run 可以启动一个进程,并且通过console 连接进程的标准输入 输出和标准错误。它甚至可以伪装成一个TTY,发送信号量。所有这一切都是可以配置的。
-a=[]:Attach to `STDIN`,`STDOUT`and/or`STDERR`-t=false:Allocate a pseudo-tty
--sig-proxy=true:Proxify all received signal to the process (even in non-tty mode)-i=false:Keep STDIN open even ifnot attached

如果你不想使用 -a 来连接容器的所有输入输出,那么你可以指定你希望接受的流STDIN, STDOUT, STDERR):
$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash

在交互式的情况下,你最希望得到一个类似TTY那样的shell,你可以 指定 -i -t
taxonomyextra:
docker

docker 容器启动后立马退出的解决方法

原因:
容器同时只能管理一个进程,如果这个进程结束了容器就退出了,但是不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须要有一个进程在前台执行。
 
解决方案:
启动脚本最后一个进程一定要用前台运行方式 即在进程最后不加 &(&表示在后台执行),否则容器退出
 
可在脚本后加  /bin/bash ,如果还不行,就换为 tail -f /dev/null (实时查看/dev/null)

以上是关于Docker 容器后台运行和前台运行的区别的主要内容,如果未能解决你的问题,请参考以下文章

docker容器前台或后台运行的方法

docker容器前台或后台运行的方法

DOCKER的nginx前台运行原因

Docker容器管理总结

docker 的前台模式(Foregroud)和后台模式(Detached)(-a, --attach value;-t, --tty;--sig-proxy;-i, --interactive)

docker 的前台模式(Foregroud)和后台模式(Detached)(-a, --attach value;-t, --tty;--sig-proxy;-i, --interactive)