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

切换至Python Alpine镜像后Django应用Docker入口脚本找不到

问题:切换Python Alpine镜像后Entrypoint脚本无法执行

将Django应用的Docker基础镜像从python:3.10切换为python:alpine3.17后,执行docker run -it myapp:latest启动容器时,出现错误:

exec /app/entrypoint-prod.sh: no such file or directory

现有Dockerfile内容

FROM python:alpine3.17

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

WORKDIR /app

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

COPY Pipfile /app
COPY Pipfile.lock /app
RUN pip install pipenv
RUN pipenv install --system

COPY . /app


USER root
RUN chmod +x /app/entrypoint-prod.sh
ENTRYPOINT ["/app/entrypoint-prod.sh"]

现有entrypoint-prod.sh脚本内容

#!/bin/bash

# Apply migrations
python manage.py migrate --noinput

# Collect static
python manage.py collectstatic --no-input --clear

# Start the application
gunicorn grayti_backend.wsgi:application --bind 0.0.0.0:8000 --workers 3

问题原因

Alpine Linux默认未预装bash,而你的entrypoint脚本开头指定了#!/bin/bash作为解释器,系统找不到该解释器,因此抛出看似“文件不存在”的错误(实际是解释器缺失)。

解决方案

方案1:修改脚本的Shebang为Alpine默认Shell

将entrypoint-prod.sh的第一行从#!/bin/bash改为#!/bin/sh:

#!/bin/sh

# Apply migrations
python manage.py migrate --noinput

# Collect static
python manage.py collectstatic --no-input --clear

# Start the application
gunicorn grayti_backend.wsgi:application --bind 0.0.0.0:8000 --workers 3

方案2:在Dockerfile中安装bash

在apk add步骤中添加bash包,确保系统能找到bash解释器:

RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev bash

额外验证

确保脚本权限正确,Dockerfile中COPY文件后执行权限赋予操作:

COPY . /app
RUN chmod +x /app/entrypoint-prod.sh

内容的提问来源于stack exchange,提问作者Mohamed El Hadramy Oumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:40:25