Ubuntu Docker容器中无法启动Bash脚本问题求助
解决Ubuntu/xenial64 Docker容器中运行Bash脚本报错的问题
我之前也踩过一模一样的坑!你遇到的standard_init_linux.go:195: exec user process caused "no such file or directory"错误,明明文件存在却跑不起来,大概率是两个常见问题之一,咱们一步步排查解决:
1. 脚本缺失正确的Shebang行
Docker用ENTRYPOINT ["/setup.sh"]这种exec形式执行脚本时,会直接尝试运行文件,系统需要明确知道用什么解释器来解析脚本内容。如果你的setup.sh开头没有指定bash的路径,系统就找不到正确的执行入口。
解决方法:在setup.sh的第一行必须加上:
#!/bin/bash
2. 脚本的换行符是Windows格式(CRLF)
如果是在Windows系统下编写的setup.sh,默认换行符是CRLF(\r\n),但Linux容器只识别LF(\n)。这时候脚本里的Shebang行会变成#!/bin/bash\r,系统会把/bin/bash\r当成一个不存在的命令,自然抛出“找不到文件”的错误。
解决方法:
- 用文本编辑器(比如VS Code)打开脚本,把右下角的换行符设置为
LF - 或者在Dockerfile里添加一步转换操作:
FROM ubuntu:16.04 COPY setup.sh /setup.sh RUN apt-get update && apt-get install -y dos2unix && dos2unix /setup.sh && chmod +x /setup.sh ENTRYPOINT [ "/setup.sh" ]
快速验证问题的方法
你可以先进入容器手动测试,确认问题根源:
# 启动容器并进入bash交互模式 docker run -it --entrypoint bash your-image-name # 在容器内执行脚本,看具体错误提示 ./setup.sh
如果看到bash: ./setup.sh: /bin/bash^M: bad interpreter,就百分百是换行符的问题了。
另外你用CMD ["/setup.sh"]遇到同样问题,是因为这种exec形式的执行逻辑和ENTRYPOINT一致,都是直接调用脚本而非通过shell解析,所以根源还是脚本本身的问题。
内容的提问来源于stack exchange,提问作者Cris
相关产品推荐
相关产品推荐

