Docker部署Rails项目修改数据库名报Unknown database错误如何解决
报错原因
MySQL官方Docker镜像的初始化逻辑仅会在容器首次启动、对应数据卷为空时,读取MYSQL_DATABASE环境变量自动创建指定名称的数据库。你第一次启动项目时已经生成了存储app数据库的持久化数据卷,后续修改MYSQL_DATABASE配置后重启容器,MySQL不会重复执行初始化流程,因此新的hello数据库并未实际创建,Rails连接时就会抛出Unknown database 'hello'的错误。
修复操作步骤
方案一(推荐,新手友好):清除旧的数据库数据卷,重新初始化
- 执行命令停止并删除原有容器及关联数据卷:
docker-compose down -v注意:
-v参数会删除数据库服务关联的持久化卷,原有库内的所有数据会被清空,如果需要保留数据请使用方案二。
2. 确认docker-compose.yml已完成两处修改:- db服务环境变量中
MYSQL_DATABASE: hello - app服务环境变量中
DB_NAME: hello
- 重新启动服务即可:
docker-compose up --build本次启动时MySQL会重新执行初始化逻辑,自动创建
hello数据库,项目即可正常运行。方案二(保留原有数据):手动创建新数据库
如果不想清空原有数据库数据,可以直接进入MySQL容器手动创建hello库,执行命令:docker-compose exec db mysql -u root -ppassword -e "CREATE DATABASE IF NOT EXISTS hello;"执行完成后重启Rails服务即可正常连接。
你当前的Dockerfile、database.yml配置无需额外修改,database.yml已配置读取环境变量的
DB_NAME参数,不需要手动调整。
内容的提问来源于stack exchange,提问作者mrateb
相关产品推荐
相关产品推荐

