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

Docker运行报错entrypoint.sh未找到及Windows7单文件转LF换行求助

Docker entrypoint.sh 未找到问题解决

核心问题分析

  1. 挂载覆盖导致文件丢失:docker-compose中配置了- ./src:/usr/src/app,会把容器内/usr/src/app目录完全替换为本地src目录。如果本地src目录中没有entrypoint.sh,容器启动时就会找不到该文件。
  2. 构建上下文路径错误:docker-compose的build.context设为./src,意味着构建时仅以src目录为上下文。如果entrypoint.sh在api根目录而非src下,Dockerfile中的COPY entrypoint.sh .在构建阶段就无法正确复制文件(即使构建日志显示文件存在,运行时挂载覆盖也会导致丢失)。

解决步骤

方案一:调整文件位置与挂载规则

  • 将entrypoint.sh移动到本地src目录下,确保挂载后容器内/usr/src/app能找到该文件。
  • 保留Dockerfile中chmod +x /usr/src/app/entrypoint.sh的权限设置,确保脚本可执行。

方案二:修改构建上下文与挂载策略

  • 修改docker-compose的build配置,将上下文指向项目根目录,并指定Dockerfile路径:
    build: 
      context: .
      dockerfile: src/Dockerfile
      args:
        - username=xxx
        - password=xxx
    
  • 调整挂载规则,避免覆盖整个/usr/src/app,仅挂载需要热更新的代码目录(比如src/app):
    volumes:
      - ./src/app:/usr/src/app/app
    

优化Dockerfile冗余配置

  • 去掉重复的COPY entrypoint.sh .,因为COPY . .已经包含了该文件。
  • ENTRYPOINT可以简化为ENTRYPOINT ["./entrypoint.sh"](已在WORKDIR下,且脚本已有执行权限)。
Windows7下转换单个文件为LF换行格式

使用Git命令行

  1. 打开Git Bash,进入目标文件所在目录。
  2. 执行命令移除CRLF自动转换:
    git config --local core.autocrlf false
    
  3. 用sed命令去除换行符中的\r:
    sed -i 's/\r$//' entrypoint.sh
    
    或者使用Git的重归一化命令:
    git add --renormalize entrypoint.sh
    

使用Dreamweaver CC 2014.1

  1. 打开目标文件entrypoint.sh。
  2. 点击文档右下角的换行符标识(通常显示为CRLF),在弹出菜单中选择LF。
  3. 或者通过菜单栏设置:编辑 -> 首选参数 -> 新建文档,将默认换行符改为LF,再保存文件。

内容的提问来源于stack exchange,提问作者Nihar Karra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:05:56