Docker构建Django项目镜像报错:mysql_config未找到
解决Docker部署Django时mysqlclient安装失败的问题
这个问题和requirements.txt无关,核心是你用的Alpine基础镜像缺少mysqlclient编译所需的系统依赖。mysqlclient安装时需要调用mysql_config工具,但Alpine默认没有预装相关组件,导致编译环节直接失败。
解决办法:修改Dockerfile,先安装系统依赖
在安装Python依赖前,通过apk安装编译mysqlclient必须的包:
# pull the official base image FROM python:3.8.3-alpine # set work directory WORKDIR /usr/src/app # set environment variables ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # 安装mysqlclient编译依赖与编译工具 RUN apk update && apk add --no-cache mariadb-dev gcc musl-dev python3-dev # install dependencies RUN pip install --upgrade pip COPY ./requirements.txt /usr/src/app RUN pip install -r requirements.txt # 可选:清理冗余依赖与缓存,缩小镜像体积 RUN apk del gcc musl-dev python3-dev && rm -rf /var/cache/apk/* # copy project COPY . /usr/src/app EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
关键说明:
mariadb-dev:提供mysql_config工具,是mysqlclient编译的核心依赖gcc、musl-dev、python3-dev:编译Python扩展包必需的编译工具与头文件- 最后清理依赖的步骤可省略,但能有效减小镜像体积
替代方案:换用Debian系Python镜像
如果不想折腾Alpine的编译依赖,可以换成python:3.8.3-slim这类Debian基础镜像,只需安装default-libmysqlclient-dev即可解决问题:
FROM python:3.8.3-slim WORKDIR /usr/src/app ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 RUN apt-get update && apt-get install -y --no-install-recommends default-libmysqlclient-dev && rm -rf /var/lib/apt/lists/* RUN pip install --upgrade pip COPY ./requirements.txt /usr/src/app RUN pip install -r requirements.txt COPY . /usr/src/app EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
内容的提问来源于stack exchange,提问作者santa
相关产品推荐
相关产品推荐

