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

Docker部署Django项目报错exec ./start.sh: no such file or directory求助

解决Windows 10下Docker中start.sh执行报错"no such file or directory"的问题

核心问题分析

报错本质并非文件不存在,而是以下几个常见原因叠加导致:

  1. Windows换行符冲突:Windows默认用CRLF换行,而Linux容器仅识别LF,导致脚本解释器路径解析错误
  2. Alpine镜像缺少bash:Alpine默认仅预装ash,若脚本指定#!/bin/bash会找不到解释器
  3. 镜像构建与挂载的冲突:本地挂载的start.sh会覆盖镜像内已处理的脚本,若本地文件未修正换行符则报错
  4. ENTRYPOINT与CMD未联动:原脚本未传递CMD参数,导致迁移后无法启动服务

具体修复步骤

1. 修正start.sh脚本

  • 切换换行符为LF:在VS Code右下角点击CRLF,选择LF;或用WSL执行dos2unix start.sh转换
  • 调整脚本内容,添加参数传递逻辑,确保迁移后执行启动命令:
#!/bin/sh
# 生成迁移文件
python manage.py makemigrations
# 应用数据库迁移
python manage.py migrate
# 执行后续命令(承接Dockerfile中的CMD)
exec "$@"

2. 优化Dockerfile

  • 移除重复的COPY start.sh .(已通过COPY . .复制)
  • 若坚持使用bash,需在Alpine中安装;否则改用#!/bin/sh适配默认shell
  • 修正后的Dockerfile:
FROM python:3.11.3-alpine

ENV PYTHONBUFFERED=1

WORKDIR /code

# 可选:如需bash,取消下方注释安装
# RUN apk add --no-cache bash

COPY requirements.txt .
RUN pip install -r requirements.txt --upgrade

COPY . .
RUN chmod +x start.sh

ENTRYPOINT ["./start.sh"]

EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

3. 验证挂载与镜像一致性

  • 临时注释docker-compose.yml中api服务的- .:/code挂载,重新构建镜像并启动:
    docker-compose build api
    docker-compose up
    
    若能正常运行,说明本地挂载的start.sh仍有格式问题,需确保本地文件已转为LF换行

4. 避免Windows自动转换换行符

  • 若使用Git,执行以下命令禁用自动CRLF转换:
    git config --global core.autocrlf false
    
    重新拉取或提交代码,确保文件以LF格式存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:45:12