Ubuntu22.04下Docker-Compose配置Django+MySQL遇安装错误求助
解决Docker中安装mysqlclient时
mysql_config not found的问题 问题根源
mysqlclient是基于C扩展的Python库,编译安装时必须依赖MySQL开发工具包(包含mysql_config工具)。你使用的python:3.8-slim-buster是轻量镜像,默认未预装这些系统级依赖,导致编译安装失败。
解决方案
修改Dockerfile,在安装Python依赖前先安装MySQL开发相关的系统包,同时升级pip到指定版本:
修改后的Dockerfile:
FROM python:3.8-slim-buster ENV PYTHONUNBUFFERED=1 WORKDIR /app # 安装mysqlclient编译所需的系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ default-libmysqlclient-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* # 升级pip到指定版本 RUN pip3 install --upgrade pip==22.3.1 COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt
额外优化建议
- 清理冗余依赖:
apt-get install添加--no-install-recommends参数,安装后清理/var/lib/apt/lists/*可大幅减小镜像体积。 - 移除无用驱动:你的
requirements.txt同时包含PostgreSQL驱动psycopg2-binary和MySQL驱动mysqlclient,若仅使用MySQL,建议删除psycopg2-binary>=2.9这一行,避免安装不必要的包。 - 统一路径配置:docker-compose.yml中app服务的挂载路径是
.:/django,但Dockerfile的工作目录是/app,路径不一致会导致代码加载异常。建议统一路径,比如将Dockerfile的WORKDIR改为/django,或修改volumes为.:/app。
调整后的docker-compose.yml(统一路径示例):
version: "3.8" services: app: build: . volumes: - .:/app ports: - 8000:8000 image: app:django container_name: django_container command: python manage.py runserver 0.0.0.0:8000 depends_on: - db db: image: mysql:5.7 environment: MYSQL_DATABASE: 'django-app-db' MYSQL_ALLOW_EMPTY_PASSWORD: 'true' volumes: - ./data/mysql/db:/var/lib/mysql
验证步骤
- 执行
docker-compose build重新构建镜像 - 构建成功后执行
docker-compose run --rm app django-admin startproject core .初始化Django项目 - 启动服务:
docker-compose up
内容的提问来源于stack exchange,提问作者Enoch
相关产品推荐
相关产品推荐

