使用ubuntu18.04镜像的Docker容器无shutdown命令时如何关闭?
Docker容器内执行传统关机命令失效的解决方法
核心原因
- 你当前使用的
ubuntu:18.04是Docker官方发布的精简版基础镜像,默认裁剪了绝大多数非必要的系统组件,没有预装systemd、upstart这类负责系统关机流程的服务,因此poweroff、shutdown、halt这类依赖对应组件的命令本身就不存在,才会触发command not found的报错。 - Docker容器的运行逻辑和物理机、传统虚拟机有本质区别:容器的运行生命周期完全由它启动时指定的PID 1核心进程决定。你当前这个容器启动的核心命令是
bash,只要这个bash进程不退出,容器就会持续保持运行状态,根本不需要走物理机那套传统的关机流程。
具体操作方案
场景1:正附着在容器的交互式bash终端中
不需要额外找关机命令,直接执行任意一种操作就能关闭容器:
- 在当前bash终端输入
exit回车,bash进程退出后容器会自动停止 - 直接按键盘快捷键
Ctrl + D,效果和输入exit完全一致
场景2:已经回到宿主机的PowerShell终端
不需要重新进入容器,直接执行宿主机侧的Docker命令即可精准关闭名称为mineos的目标容器:
- 优雅正常停止容器(给容器预留几秒的资源回收时间):
docker stop mineos - 强制立刻终止容器进程(适用于容器卡死无响应的情况):
docker kill mineos - 操作完成后可以执行之前用过的
docker ps -a命令校验状态,当目标容器的STATUS从Up xxxx变为Exited开头的状态,就说明关闭成功。
补充提示
- 若确实有在容器内部调用
shutdown类命令的强需求,就不能直接使用官方精简版ubuntu镜像,需要构建自带完整系统服务的自定义镜像,或是选择预装了systemd的镜像变体。对于绝大多数跑应用、跑脚本的日常使用场景,完全没必要做这类冗余配置。
内容的提问来源于stack exchange,提问作者安静宇
相关产品推荐
相关产品推荐

