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

Docker容器启动报错:entrypoint.sh文件找不到求助

问题排查与解决方案

最可能的原因:脚本行尾格式不兼容

如果你的entrypoint.sh是在Windows系统下编辑的,文件行尾会是CRLF(\r\n)格式,而Linux容器中的bash仅支持LF(\n)格式。这种情况下,bash会把脚本的shebang行解析为#!/bin/bash\r,无法识别带\r的命令路径,最终抛出类似“文件不存在”的误导性错误。

排查步骤

  1. 临时进入容器验证文件状态
    执行以下命令跳过原entrypoint,启动容器并进入bash:

    docker run --rm -it server:latest /bin/bash
    

    进入容器后执行:

    # 查看/app目录下的文件列表
    ls -l /app/
    # 查看脚本内容及行尾字符(^M代表CRLF格式)
    cat -A /app/entrypoint.sh
    

    若输出每行末尾有^M,则确认是行尾格式问题。

  2. 确认构建上下文路径
    确保执行docker-compose up --build时,当前工作目录是包含docker-compose.yml的根目录,保证server/目录在构建上下文范围内。

  3. 排除卷挂载覆盖
    检查docker-compose.yml是否存在未展示的卷配置,若有卷挂载到/app目录,会覆盖容器内原有的文件。

解决方法

方法1:修改脚本行尾格式

用文本编辑器(如VS Code)打开entrypoint.sh,将行尾格式切换为LF:

  • VS Code右下角可查看当前行尾格式,点击后选择LF并保存。

方法2:在Dockerfile中添加行尾转换步骤

在RUN chmod +x /app/entrypoint.sh之前添加以下内容(二选一即可):

# 方式1:用sed命令转换(无需额外安装工具)
RUN sed -i 's/\r$//' /app/entrypoint.sh
# 方式2:安装dos2unix工具转换
RUN apt-get update && apt-get install -y dos2unix && dos2unix /app/entrypoint.sh

方法3:简化ENTRYPOINT写法

若脚本shebang正确且行尾格式没问题,可直接将ENTRYPOINT设为脚本本身:

ENTRYPOINT ["/app/entrypoint.sh"]

内容的提问来源于stack exchange,提问作者Stefan Wobbe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:55:23