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

Ubuntu服务器Docker启动时entrypoint.sh: not found错误解决

解决Docker启动时./AA/entrypoint.sh: not found错误

1. 修正文件路径认知

从你的本地文件结构来看,Dockerfile位于/usr/src/app/server/AA/目录下,执行COPY . .时,是将AA目录下的所有文件复制到容器的工作目录/usr/src/app/server中。也就是说,容器内entrypoint.sh的实际路径是/usr/src/app/server/entrypoint.sh,而非/usr/src/app/server/AA/entrypoint.sh——你之前的路径写法完全错误。

2. 修复ENTRYPOINT指令

将Dockerfile中的ENTRYPOINT改为以下任意一种写法:

# 相对路径(基于WORKDIR)
ENTRYPOINT ["./entrypoint.sh"]
# 绝对路径(更稳妥)
ENTRYPOINT ["/usr/src/app/server/entrypoint.sh"]

3. 处理脚本换行符问题

如果你的entrypoint.sh是在Windows环境下编辑的,换行符为CRLF,而Linux容器仅识别LF,这会导致脚本被识别为无效路径。修复方法:

  • 在Ubuntu服务器上执行:
sed -i 's/\r$//' entrypoint.sh
  • 或在编辑器(如VS Code)中将文件换行符设置为LF后重新保存。

4. 赋予脚本执行权限

Docker默认复制的文件没有执行权限,需在Dockerfile中添加权限赋予指令:
在COPY . .之后添加:

RUN chmod +x entrypoint.sh

5. 修正脚本语法错误

你的entrypoint.sh中if ["$DATABASE" = "postgres"]缺少空格,Shell语法中[后、]前必须有空格,否则会触发语法错误,修正为:

if [ "$DATABASE" = "postgres" ]

最终修正后的Dockerfile示例

FROM python:3.10.11

WORKDIR /usr/src/app/server
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get -y update \
        && apt-get install -y libpq-dev gcc python3-dev musl-dev netcat-traditional \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*

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

COPY . .
RUN chmod +x entrypoint.sh

ENTRYPOINT ["/usr/src/app/server/entrypoint.sh"]

额外提示

  • 容器内无需安装postgresql服务(你原Dockerfile中安装了),Django只需连接外部PostgreSQL实例,去掉该依赖可大幅缩小镜像体积。
  • 脚本中用到的nc命令需要提前安装,已在上述示例中添加netcat-traditional到安装列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:44:51