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
相关产品推荐
相关产品推荐

