使用Docker部署Django+MySQL项目遇tg_db数据库不存在问题求助
解决Docker部署Django+MySQL时"找不到tg_db数据库"的问题
我经常碰到开发者遇到这个问题,咱们一步步来排查解决:
1. 先确认MySQL容器是否真的创建了tg_db数据库
你设置了MYSQL_DATABASE=tg_db环境变量,但有时候因为数据卷残留或者容器启动异常,数据库可能没被正确创建。咱们手动验证一下:
# 先列出所有容器,找到MySQL容器的名称或ID docker ps -a # 进入MySQL容器的命令行 docker exec -it [你的MySQL容器名/ID] bash # 登录MySQL(输入你设置的MYSQL_ROOT_PASSWORD) mysql -u root -p # 查看当前所有数据库 SHOW DATABASES;
如果输出里没有tg_db,那说明环境变量没生效,大概率是旧数据卷在搞鬼。这时候可以彻底清理数据卷后重启:
# 停止并删除容器及关联的数据卷 docker-compose down -v # 重新启动所有容器 docker-compose up -d
2. 解决Web容器"抢跑"的问题
MySQL容器启动后,不是立刻就能接受连接的——它需要初始化系统数据库、创建你指定的tg_db,这个过程可能需要几秒到几十秒。而Django容器启动后会立刻尝试连接数据库,这时候MySQL还没准备好,就会报错找不到数据库。有几个靠谱的解决办法:
方法一:用healthcheck让Web容器等MySQL就绪
在你的docker-compose.yml里给MySQL服务加健康检查,让Web容器只在MySQL完全就绪后才启动:
services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: your_root_pw MYSQL_DATABASE: tg_db MYSQL_USER: django_user MYSQL_PASSWORD: django_pw # 添加健康检查 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 3s timeout: 3s retries: 5 web: build: . command: python manage.py runserver 0.0.0.0:8000 depends_on: mysql: # 只在MySQL健康检查通过后启动 condition: service_healthy
方法二:给Django加启动重试脚本
写一个简单的shell脚本,让Django反复尝试连接数据库,成功后再启动服务。比如在你的Django项目根目录创建wait-for-db.sh:
#!/bin/bash # 循环尝试连接数据库,直到成功 until python manage.py inspectdb > /dev/null 2>&1; do echo "Waiting for database to be ready..." sleep 2 done # 数据库就绪后启动Django python manage.py runserver 0.0.0.0:8000
然后给脚本加执行权限:chmod +x wait-for-db.sh,再修改docker-compose.yml里的web服务命令:
web: build: . command: ./wait-for-db.sh
3. 检查Django的数据库配置是否正确
最后再确认一下settings.py里的数据库配置,一定要和Docker容器的配置对应上:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'tg_db', # 和MYSQL_DATABASE一致 'USER': 'django_user', # 和MYSQL_USER一致 'PASSWORD': 'django_pw', # 和MYSQL_PASSWORD一致 'HOST': 'mysql', # 这里必须是docker-compose里MySQL服务的名称,不能是localhost 'PORT': '3306', } }
重点注意HOST是服务名(比如你docker-compose里MySQL服务叫mysql,就写mysql),因为Docker容器之间是通过服务名通信的,写localhost会让Django去连接自己容器里的MySQL,自然找不到。
内容的提问来源于stack exchange,提问作者ricky
相关产品推荐
相关产品推荐

