You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:34:29