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

Docker部署DRF后端报错:entrypoint.sh文件不存在或格式错误

DRF Docker环境entrypoint.sh执行错误解决方案

问题现象

搭建DRF后端Docker测试API环境时,Docker Desktop抛出错误:exec /code/docker/entrypoints/entrypoint.sh: no such file or directory;移除脚本头部的#!/bin/sh后,又出现exec格式错误;修改脚本路径为/code/entrypoint.sh仍提示文件不存在。

核心原因与修复步骤

1. 修复脚本换行符不兼容问题

Windows系统创建的shell脚本默认使用CRLF换行格式,而Linux容器仅支持LF换行。这会导致脚本头部的#!/bin/sh被解析为#!/bin/sh\r,系统无法找到对应的解释器路径。

  • 用VS Code打开entrypoint.sh,点击右下角的CRLF标识,切换为LF;
  • 或通过git命令全局设置换行符:git config --global core.autocrlf false,重新同步脚本文件。

2. 确认路径与挂载一致性

你的本地目录结构中,entrypoint.sh位于backend/docker/entrypoints/:

DRF_docker
|__backend
    |__docker
        |__entrypoints
            |__entrypoint.sh

Dockerfile的构建上下文为./backend,执行COPY . /code/后,容器内脚本路径应为/code/docker/entrypoints/entrypoint.sh,该路径配置正确。但需注意:
docker-compose中volumes: - ./backend:/code会将本地backend目录挂载到容器/code,如果本地脚本文件缺失或路径错误,会覆盖容器内的文件,导致找不到脚本。务必确保本地backend/docker/entrypoints/entrypoint.sh存在。

3. 保留脚本解释器并确保权限

  • 不要移除#!/bin/sh,这是Linux系统识别shell脚本的必要标识,移除后系统无法判断脚本类型,会触发格式错误;
  • 确保脚本有可执行权限:Dockerfile中已配置chmod +x /code/docker/entrypoints/entrypoint.sh,但如果本地挂载覆盖了容器内文件,需在本地执行:chmod +x backend/docker/entrypoints/entrypoint.sh。

4. 修复依赖文件名拼写错误

目录中requirements.txt被误写为reuiqrements.txt,会导致pip install -r /code/requirements.txt执行失败,影响容器构建。需将文件名修正为requirements.txt。

验证修复

完成上述修改后,重新构建并启动容器:

docker-compose down
docker-compose build --no-cache
docker-compose up

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:03:31