Docker运行报错entrypoint.sh未找到及Windows7单文件转LF换行求助
Docker entrypoint.sh 未找到问题解决
核心问题分析
- 挂载覆盖导致文件丢失:docker-compose中配置了
- ./src:/usr/src/app,会把容器内/usr/src/app目录完全替换为本地src目录。如果本地src目录中没有entrypoint.sh,容器启动时就会找不到该文件。 - 构建上下文路径错误: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命令行
- 打开Git Bash,进入目标文件所在目录。
- 执行命令移除CRLF自动转换:
git config --local core.autocrlf false - 用sed命令去除换行符中的
\r:
或者使用Git的重归一化命令:sed -i 's/\r$//' entrypoint.shgit add --renormalize entrypoint.sh
使用Dreamweaver CC 2014.1
- 打开目标文件
entrypoint.sh。 - 点击文档右下角的换行符标识(通常显示为
CRLF),在弹出菜单中选择LF。 - 或者通过菜单栏设置:
编辑->首选参数->新建文档,将默认换行符改为LF,再保存文件。
内容的提问来源于stack exchange,提问作者Nihar Karra
相关产品推荐
相关产品推荐

