DockerFile与docker-compose在Windows运行报错:找不到wsgi-entrypoint.sh
解决Windows下Docker执行
exec /app/wsgi-entrypoint.sh: no such file or directory错误 核心原因
Linux和Windows文本文件的换行符格式存在差异:Windows默认用CRLF,而Linux容器使用LF。如果你的wsgi-entrypoint.sh是在Windows环境下创建或编辑的,换行符会是CRLF,容器执行脚本时会把CR字符当成命令路径的一部分,导致命令解析失败;另外脚本可能缺少执行权限,也会触发类似报错。
解决方案
1. 修正脚本换行符为Unix格式
打开wsgi-entrypoint.sh,将换行符从CRLF改为LF:
- VS Code:点击右下角状态栏的
CRLF选项,选择LF后保存文件。 - Notepad++:菜单栏「编辑」→「文档格式转换」→「转换为UNIX格式」。
2. 在Dockerfile中添加脚本执行权限
修改Dockerfile,在ADD . ${APP_ROOT}之后增加一行,赋予脚本执行权限:
FROM python:3.10.1 ENV APP_ROOT /app ENV CONFIG_ROOT /config ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 RUN mkdir ${CONFIG_ROOT} COPY requirements.txt ${CONFIG_ROOT}/requirements.txt COPY firebase.json ${CONFIG_ROOT}/firebase.json RUN pip install -r ${CONFIG_ROOT}/requirements.txt RUN python -m spacy download en_core_web_sm RUN mkdir ${APP_ROOT} WORKDIR ${APP_ROOT} ADD . ${APP_ROOT} # 新增:赋予脚本执行权限 RUN chmod +x ${APP_ROOT}/wsgi-entrypoint.sh
3. 优化entrypoint写法(可选)
将docker-compose.yml中web服务的entrypoint改为数组格式,避免shell解析歧义:
web: # 其他配置保持不变 entrypoint: ["/app/wsgi-entrypoint.sh"] command: ["gunicorn", "--workers=2", "--bind=0.0.0.0:8000", "picard.wsgi:application"]
4. 验证Docker Desktop文件共享(可选)
确保Docker Desktop已开启项目所在盘符的文件共享:
- 打开Docker Desktop设置 → 资源 → 文件共享,勾选项目所在的盘符(如C盘),应用设置并重启Docker。
内容的提问来源于stack exchange,提问作者Omega
相关产品推荐
相关产品推荐

