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

Windows WSL2 Docker Desktop启动Rails容器报错:找不到entrypoint.sh

解决Docker启动Rails容器时的entrypoint.sh找不到问题

常见原因及对应解决方法

1. 脚本换行符格式不兼容(Windows CRLF vs Linux LF)

Windows系统创建的entrypoint.sh默认用CRLF换行,而Linux容器仅识别LF格式,这会导致容器执行脚本时把CR字符当成命令的一部分,触发"找不到文件"的错误。

解决办法:

  • 直接在WSL2的Linux环境中创建/编辑entrypoint.sh,确保使用LF换行。
  • 若在Windows编辑器中编辑,开启"使用LF换行"设置(比如VS Code右下角可切换格式)。
  • 在Dockerfile中添加转换步骤,先安装dos2unix工具再转换脚本:
    RUN apt-get install -y dos2unix
    COPY entrypoint.sh /usr/bin/
    RUN dos2unix /usr/bin/entrypoint.sh && chmod +x /usr/bin/entrypoint.sh
    

2. 缺少正确的Shebang解释器声明

entrypoint.sh开头必须指定脚本解释器,否则容器无法识别执行程序。确保脚本第一行是:

#!/bin/bash

或根据容器环境使用#!/bin/sh,保存后再重新构建镜像。

3. 确认entrypoint.sh的位置与COPY命令正确性

  • 确保entrypoint.sh在项目根目录下(与Dockerfile同级),否则Dockerfile里的COPY entrypoint.sh /usr/bin/会找不到源文件,导致容器内无该脚本。
  • 查看镜像构建日志,确认COPY步骤是否成功执行。

4. 手动验证容器内脚本状态

若以上步骤无效,可临时修改Dockerfile的CMD为bash,启动容器后手动进入排查:

docker-compose run web bash

在容器内执行以下命令检查:

ls -l /usr/bin/entrypoint.sh  # 确认文件存在且有执行权限
cat /usr/bin/entrypoint.sh    # 查看内容是否正确、换行符是否正常
./usr/bin/entrypoint.sh       # 手动执行脚本,查看具体报错

额外优化建议

  • 将ADD . /app替换为COPY . /app,ADD会自动解压压缩包,此处无需该功能,COPY更稳妥。
  • 将entrypoint.sh的COPY步骤提前,利用Docker构建缓存减少重复构建时间。

内容的提问来源于stack exchange,提问作者Igor L. de Jesus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:40