Docker CMD命令执行脚本后容器退出的问题

CMD命令执行脚本的原理,本质上是用了 /bin/sh -c 这一命令来执行用户脚本,所以当前容器的主进程其实是/bin/sh,而不是用户的脚本。

/bin/sh执行完用户脚本后就退出了,作为主进程,当其退出后,Docker容器也随之退出了,这一点是容器的特别之处,也是不同于虚拟机的地方。

我们通常说容器是单进程的,不仅仅指容器里面只应当运行一个主进程,实际上,我们可以认为整个容器就是我们的主进程,也就是说不要把容器想像成一个虚拟机,而应当把容器看作是一个可执行文件。

类似于Java的虚拟机。一个Java虚拟机就是一个应用程序。在Java虚拟机内部,只有线程。整个虚拟机是一个进程。

有两种方式可以使容器不退出:

  1. 在用户脚本的末尾加入一个死循环或者一个阻塞性的操作,使得脚本自己不会主动退出;
  2. 使用EXEC格式的CMD或者ENTRYPOINT命令,并且直接传入一个SERVICE的启动命令而不是一个Shell脚本;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值