Docker容器即使与-it一起运行也会退出
我正在尝试在docker容器中运行自定义服务。该服务由myservice start启动,然后分叉并后台监控主进程并退出。然后,主进程在网络套接字上侦听传入的命令。这个过程本身运行良好 在我的Dockerfile中,我将此作为最后两个命令: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
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。