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

Docker部署MySQL与Django遇初始化及未知数据库问题求助

解决Docker+MySQL+Django部署中的几个问题

我来帮你逐个排查并解决遇到的这几个问题:

1. 单独运行MySQL容器的初始化错误

你执行的docker run命令有个小问题:多个环境变量需要分别用-e参数指定,你现在把MYSQL_USER=root和MYSQL_ROOT_PASSWORD=password放在了同一个-e后面,导致MySQL容器无法正确识别密码参数,所以抛出了“database is uninitialized and password option is not specified”的错误。

正确的命令应该是:

docker run --name=mysql -e MYSQL_ROOT_PASSWORD=password -d mysql

另外,MYSQL_USER=root其实是多余的——root是MySQL默认的超级用户,不需要单独指定这个变量来创建它。如果你要创建额外的普通用户,才需要搭配MYSQL_USER和MYSQL_PASSWORD参数使用。

2. docker-compose up时的Unknown database 'bitpal'错误

这个问题的核心是MySQL容器初始化时没有创建bitpal数据库,导致Django连接时报错。原因是你在docker-compose.yml的mysql服务里用错了环境变量名:

  • MySQL 5.7镜像用来初始化创建数据库的环境变量是MYSQL_DATABASE,而你写的是MYSQL_DB,这个变量名是无效的,所以容器启动时并没有自动创建bitpal库。

修改mysql服务的环境变量部分:

mysql:
  image: mysql:5.7
  restart: always
  hostname: mysql
  container_name: mysql
  environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_DATABASE=bitpal  # 把原来的MYSQL_DB改成MYSQL_DATABASE
  ports:
    - "3306:3306"

修改后重新执行docker-compose up,MySQL容器启动时就会自动创建bitpal数据库,Django就能正常连接了。

3. wait-for-it.sh的放置位置

建议你把wait-for-it.sh放在ROOT/bitpal/bin目录下:

  • 你的bitpal、worker、websocket_listener这些服务的working_dir都是/bitpal,而且启动命令都是调用./bin/下的脚本(比如./bin/start_dev.sh),把wait-for-it.sh放在这里的话,所有需要等待依赖服务(比如MySQL、Redis)启动就绪的服务,都可以在自己的启动脚本里调用它。

比如在start_dev.sh的开头加上:

./bin/wait-for-it.sh mysql:3306 -- ./your-django-start-command

这样能确保Django在MySQL完全启动并就绪后再尝试连接,避免因为启动顺序导致的连接失败(depends_on只保证容器启动顺序,不保证服务内部就绪)。

内容的提问来源于stack exchange,提问作者Norseback

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:32