为什么 Docker 入口点脚本不在分离模式下执行?

Geo*_* P. 1 docker

假设这个简单的 Dockerfile:

FROM debian:stretch
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod a+x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

entrypoint.sh 看起来像这样:

#!/bin/bash
echo yyyyyyyyyyyyyyy
exec "$@"
Run Code Online (Sandbox Code Playgroud)

现在,如果我构建映像并在前台创建容器,则会执行入口点脚本:

$ docker build . -t mytest
[...]
$ docker run --rm -it mytest /bin/bash
yyyyyyyyyyyyyyy
root@3e3d7290b09c:/#
Run Code Online (Sandbox Code Playgroud)

但是如果我在分离模式下创建容器,它不会被执行:

$ docker run --rm -d -it mytest /bin/bash
f8e72a222c5194f61843569ae76798bb09736fa4205b93e484f11de32df4db64
Run Code Online (Sandbox Code Playgroud)

这是为什么?或者,更重要的是,我如何创建一个分离的容器,在其中执行入口点脚本?

Var*_*orb 5

如果你看一下docker docs

-d=false:分离模式:在后台运行容器,打印新的容器 id

如果您想查看输出,分离模式通常用于服务而不是独立脚本。如果您不想看到输出,可以在独立脚本上使用分离模式。应该在分离模式下运行的服务将包括数据库、Web 服务器等。没有一次运行脚本去和退出。

您的容器在后台运行然后退出,因为脚本已结束。由于-doption 仅打印出您将看到的所有容器 ID