Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Docker入口点脚本没有在分离模式下执行?_Docker - Fatal编程技术网

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

为什么Docker入口点脚本没有在分离模式下执行?,docker,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"] entrypoint.sh如下所示: #!/bin/bash echo yyyyyyyyyyyyyyy exec "$@" 现在,如果我构建图像并在

假设这个简单的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"]
entrypoint.sh如下所示:

#!/bin/bash
echo yyyyyyyyyyyyyyy
exec "$@"
现在,如果我构建图像并在前景中创建容器,将执行entrypoint脚本:

$ docker build . -t mytest
[...]
$ docker run --rm -it mytest /bin/bash
yyyyyyyyyyyyyyy
root@3e3d7290b09c:/#
$ docker run --rm -d -it mytest /bin/bash
f8e72a222c5194f61843569ae76798bb09736fa4205b93e484f11de32df4db64
但如果在分离模式下创建容器,则不会执行:

$ docker build . -t mytest
[...]
$ docker run --rm -it mytest /bin/bash
yyyyyyyyyyyyyyy
root@3e3d7290b09c:/#
$ docker run --rm -d -it mytest /bin/bash
f8e72a222c5194f61843569ae76798bb09736fa4205b93e484f11de32df4db64
为什么呢?或者,更重要的是,如何创建一个分离的容器,在其中执行entrypoint脚本?

如果您查看

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

如果要查看输出,通常为服务而不是独立脚本创建分离模式。如果不想看到输出,可以在独立脚本上使用分离模式。应该以分离模式运行的服务包括数据库、web服务器和est。没有一次运行过退出的脚本

容器在后台运行,然后退出,因为脚本已结束。因为
-d
选项只打印出容器id,如果您查看

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

如果要查看输出,通常为服务而不是独立脚本创建分离模式。如果不想看到输出,可以在独立脚本上使用分离模式。应该以分离模式运行的服务包括数据库、web服务器和est。没有一次运行过退出的脚本


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

请查看文档。当您未处于分离模式时,您可以根据
-a
标志连接STDIN、STDOUT、STDERR。尝试传递该
-a
当您处于
-d
模式时,您将遇到错误。处于分离模式时,进程在后台运行,不会输出到标准输出。如果运行
docker logs f8e72a22
,您应该会看到容器的输出,从
echo
语句开始。这是对@DavidMaze的很好的调用。感谢你们两位。特别是对于
日志
命令-这是一个伟大的命令!看看这些文件。当您未处于分离模式时,您可以根据
-a
标志连接STDIN、STDOUT、STDERR。尝试传递该
-a
当您处于
-d
模式时,您将遇到错误。处于分离模式时,进程在后台运行,不会输出到标准输出。如果运行
docker logs f8e72a22
,您应该会看到容器的输出,从
echo
语句开始。这是对@DavidMaze的很好的调用。感谢你们两位。特别是对于
日志
命令-这是一个伟大的命令!非常感谢,我现在更明白了。我确实想运行一个独立的脚本并查看它的输出。但是,在执行它之前,我已经需要一个现有的容器,因为我必须将一些文件复制到其中(不,我不能用Dockerfile执行)。所以我的顺序是
docker-run-d…
,然后是
docker-cp…
,然后是
docker-exec-it。。。我的独立脚本
。也许
run-d
不是创建容器的正确方法?这里的答案是+1。。如果您想运行更多的命令组合,我建议您在dockerfile中对它们排序,而不是将它们传递给docker Clip。非常感谢,我现在更了解它了。我确实想运行一个独立的脚本并查看它的输出。但是,在执行它之前,我已经需要一个现有的容器,因为我必须将一些文件复制到其中(不,我不能用Dockerfile执行)。所以我的顺序是
docker-run-d…
,然后是
docker-cp…
,然后是
docker-exec-it。。。我的独立脚本
。也许
run-d
不是创建容器的正确方法?这里的答案是+1。。如果您想运行更多的命令,我建议您在dockerfile中对它们排序,而不是将它们传递给docker cli