Docker中Django runserver无法运行,MySQL连接问题求助
Django容器化连接MySQL启动失败的解决方案
一、补充系统级MySQL依赖
Python的mysqlclient依赖系统级的MySQL客户端库,你的Docker镜像里缺少这些依赖,会导致依赖安装失败或启动时无法连接MySQL。修改Dockerfile,添加依赖安装步骤:
FROM python:3.9 ENV PYTHONUNBUFFERED=1 # 安装MySQL客户端编译依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ default-libmysqlclient-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* RUN mkdir /app WORKDIR /app COPY requirements.txt /app/ RUN pip install -r requirements.txt COPY . /app/ # 添加默认启动命令 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
二、修正数据库连接配置
检查settings.py里的数据库配置,重点确认以下几点:
- HOST:如果MySQL是Docker Compose部署的服务,填写服务名称(比如
mysql);如果是本地主机的MySQL,Linux/macOS用host.docker.internal,Windows用主机IP或localhost - NAME:确保这个数据库已经在MySQL中创建(Django不会自动创建数据库)
- USER/PASSWORD/PORT:和MySQL的实际配置完全匹配
示例正确配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'your_project_db', 'USER': 'db_user', 'PASSWORD': 'db_password', 'HOST': 'mysql', # 对应Docker Compose中的服务名 'PORT': '3306', } }
三、确保MySQL服务就绪后再启动Django
如果用Docker Compose编排服务,添加健康检查让Django等待MySQL启动完成,避免因数据库未就绪导致连接失败:
version: '3.8' services: web: build: . ports: - "8000:8000" depends_on: mysql: condition: service_healthy environment: - DB_HOST=mysql - DB_NAME=your_project_db - DB_USER=db_user - DB_PASSWORD=db_password mysql: image: mysql:8.0 environment: - MYSQL_DATABASE=your_project_db - MYSQL_USER=db_user - MYSQL_PASSWORD=db_password - MYSQL_ROOT_PASSWORD=root_pwd healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 20s retries: 10
四、确认依赖清单包含mysqlclient
检查requirements.txt,确保添加了MySQL驱动依赖:
django>=3.2 mysqlclient>=2.1.0 # 其他项目依赖...
内容的提问来源于stack exchange,提问作者Yousef
相关产品推荐
相关产品推荐

