Docker容器即使与-it一起运行也会退出

Docker容器即使与-it一起运行也会退出,docker,containers,Docker,Containers,我正在尝试在docker容器中运行自定义服务。该服务由myservice start启动,然后分叉并后台监控主进程并退出。然后,主进程在网络套接字上侦听传入的命令。这个过程本身运行良好 在我的Dockerfile中,我将此作为最后两个命令: WORKDIR "/app/myservice" CMD ["bin/myservice", "start"] 映像已成功构建。现在,当我这样运行它时: docker run -d -p 7890:7890 myimage docker run -dit

我正在尝试在docker容器中运行自定义服务。该服务由myservice start启动,然后分叉并后台监控主进程并退出。然后,主进程在网络套接字上侦听传入的命令。这个过程本身运行良好

在我的Dockerfile中,我将此作为最后两个命令:

WORKDIR "/app/myservice"
CMD ["bin/myservice", "start"]
映像已成功构建。现在,当我这样运行它时:

docker run -d -p 7890:7890 myimage
docker run -dit -p 7890:7890 myimage
容器启动,然后退出。在日志中,我可以看到服务在容器退出之前启动,退出代码为0。这是预期的,因为dockerfile中的命令以代码0退出

看看,如果我这样运行它,似乎很明显:

docker run -d -p 7890:7890 myimage
docker run -dit -p 7890:7890 myimage
即使在启动我的服务的批处理脚本退出之后,容器也应该保持运行。但事实并非如此——容器会立即终止并退出


我错过了什么?如何使容器保持运行?

比较这两个容器的寿命

(一)
docker run-it ubuntu sh-c“echo Hello;sleep 3”

(二)
docker run-it ubuntu sh-c“while true;do echo Hello;sleep 3;done”

检查文档中的CMD

入口点

当你

docker run-it ubuntu bash

只要退出bash,容器就完成并退出

也检查

`

当容器第一个PID 1(更新!)过程完成(以0或其他形式退出)时,容器也会退出

要使容器保持活动状态,第一个pid也必须保持活动状态


在脚本myservice的末尾,您可以添加这一行
tail-f/dev/null

通常,您不需要对容器中的任何内容进行后台监控。常见的模式是启动一个永远有效的命令并打印到STDOUT/STDERR中。 当/如果该命令失败,容器将停止。 所以,移除

。。。然后分叉并后台监控主进程并退出


退出并启动主进程。

只要启动的命令处于活动状态,容器就会存在,可以添加一个
;睡眠无限
或类似的数值,它是pid 1,而不是0。