启动Docker运行sh文件报session ended very soon after starting错误如何解决
Docker运行sh文件会话提前终止报错排查方案
报错原文:Docker sh error : session ended very soon after starting. Check that the command in profile "Default" is correct.
1. 检查sh文件基础合法性
- 检查换行符格式:Windows环境下编辑的sh文件默认是CRLF换行符,Linux容器无法识别会直接执行失败,可执行
dos2unix 你的脚本名称.sh转换为LF格式。 - 检查可执行权限:给目录下所有sh文件赋予执行权限,执行
chmod +x *.sh,如果是容器内挂载的文件,要注意权限映射不要限制执行权限。 - 检查脚本首行声明:sh文件第一行必须是正确的解释器声明,比如
#!/bin/sh或者#!/bin/bash,不要填写不存在的解释器路径。
2. 检查docker-compose配置
- 验证启动命令路径:查看docker-compose.yml中的
command或entrypoint字段,填写的sh脚本路径必须准确,建议使用绝对路径(比如/app/start.sh)替代相对路径,避免工作目录不匹配导致找不到文件。 - 检查是否缺少驻留进程:如果sh脚本仅执行单次任务、没有前台运行的常驻服务,容器会随主进程退出触发报错。如需容器保持运行,可在脚本末尾添加
tail -f /dev/null阻塞命令,或在docker-compose对应服务下添加tty: true、stdin_open: true配置。
3. 调试定位具体报错
- 前台启动查看日志:不要加
-d参数后台启动,直接执行docker-compose up,观察sh脚本执行过程中的实时输出,定位是命令不存在、依赖缺失还是逻辑错误。 - 进入容器手动验证:执行
docker-compose run --rm 你的服务名 /bin/sh覆盖默认启动命令进入容器,手动执行sh文件逐行验证脚本逻辑,排查执行报错点。
4. 检查Docker终端Profile配置
如果使用Docker Desktop内置终端,确认Default profile的启动命令未被篡改,默认应对应宿主系统的默认shell(如PowerShell、bash),不要填写不存在的命令路径。
内容的提问来源于stack exchange,提问作者user14728703
相关产品推荐
相关产品推荐

