Docker分离模式


84

Docker世界中的分离模式是什么?我读了这篇文章 Link,但没有确切解释分离模式的含义。

Answers:


141

您可以使用-d选项以分离模式启动Docker容器。因此,容器启动并在后台运行。这意味着,您启动了容器,并且可以在启动后使用控制台来执行其他命令。

分离模式的相反是前景模式。当-d不使用option时,这是默认模式。在这种模式下,您要执行的控制台docker run将附加到标准输入,输出和错误中。这意味着您的控制台已连接到容器的进程。

在分离模式下,您可以使用跟随Docker容器的标准输出docker logs -f <container_ID>

只需尝试两个选项。我总是使用分离模式来运行我的容器。我希望我能解释得更清楚一些。


嗨,您所说的话令人困惑-码头工人文档所说的是“您...启动后可以将hte容器用于其他命令”。显然,在前台,如果您具有-it并且提示您,则正在将该容器用于其他命令。仍在寻找-d的定义...
Brian Bulkowski

3
@BrianBulkowski-这根本不是答案。短语“ ...启动后可以使用控制台...”表示,当Docker容器在后台运行时,您从其启动Docker容器的终端仍可用作常规外壳。
没用的

您还可以将日志输出通过管道传输到文件吗?如果我叫docker logs -f <container_ID>,我的终端就会疯狂地打印一行一行。
于尔根K.

@JürgenK。我发现你可以做到docker logs -f [container_ID] > logs.txt。如果它不起作用,请按照下面的@BMitch的建议在启动Docker容器时尝试添加'-it'标志。
Sanlok Lee

@Sanlok Lee。谢谢。可以为docker日志文件的行号设置限制吗?尺寸增大安静快,我需要把它清除掉
于尔根K.

29

docker命令行上的detach选项指示docker客户端(docker)将向服务器(dockerd)发出请求,然后客户端将退出,同时该请求在服务器上继续。造成混淆的部分原因可能是docker看起来像一个进程,实际上它是一个客户端/服务器应用程序,其中客户端只是REST API上的瘦前端,用于将每个命令发送到服务器。

使用docker container run --detach,表示将创建容器,如果成功,则服务器将以容器ID进行响应,并且容器将继续在服务器上运行,而您可以自由运行其他命令。这通常用于要在后台启动并继续运行其他命令的服务器(例如nginx)。请注意,您仍可以使用--interactive-tty选项(通常缩写为-it)配置容器,然后再运行docker container attach来连接到已经运行的容器。(请注意,直到您连接到运行的容器之前-itd,该容器从stdin读取的任何尝试都将挂起,而不是看到输入的结尾,如果您刚刚通过该输入,通常会立即触发退出-d。)

如果不使用detach选项运行,则在创建容器之后,客户端将立即运行附加API调用,以便您可以查看输出并有选择地向容器上正在运行的进程提供输入。如果您的容器运行的是交互式内容(例如/bin/bash),这将很有用。

其他几个命令允许使用detach选项,其中包括docker-compose up -d将启动整个项目并使它在后台在服务器上运行的功能。还有很多docker service命令会在将更改提交给服务器以创建或更新服务的目标状态后分离,或者,如果不分离,客户端将等到该服务的当前状态与目标状态匹配时,您才能看到部署进度。请注意,使用docker service命令时,您可能必须通过--detach=false才能保持连接状态,在过去一年中,行为已更改,具体取决于您的版本。


1
国际海事组织,这也是情理之中的提到如何从一个交互连接的容器分离(CTRL-P CTRL-Q ,--detach-keys
莱昂

@Leon很好的建议,但请确保您将容器--interactive--tty(aka -it)都固定在容器上,以使其工作。
BMitch

1
谢谢@BMitch!我想我现在明白了。
VSO

1
很好地解释了@BMitch,希望文档能做到这一点!
拉维·蒂瓦里

-6
docker run -d -t ubuntu:14.04

docker run-从docker映像创建一个实例作为docker容器。(如果图像在本地不可用,则从docker hub提取)ubuntu-图像名称

14.04-标签

-d,--detach-分离模式

-t,--tty-分配伪TTY


13
不是问题的答案。
0xc0de
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.