我正在尝试在Rails项目的Docker(而非Homebrew)上使用MySQL。这是因为我需要为每个项目使用不同版本的MySQL,而用brew切换版本是很痛苦的。但是,我很难将Rails指向Docker上的MySQL服务器。
我像这样启动Docker容器(5.6
是我需要的版本):
docker run -p 3306:3306 --name project-db -e MYSQL_ROOT_PASSWORD=mysql_pw -d mysql:5.6
该容器似乎已启动并运行良好,因为
docker ps
告诉我它正在运行mysql -u root -p -h 127.0.0.1
连接到它但是我无法让Rails在Docker中创建数据库。执行
rails db:setup
会在本地安装的MySQL中创建数据库。我尝试使用
brew uninstall mysql
在本地卸载MySQL,以为它可能以某种方式超越了Docker。但是,然后尝试设置数据库会导致以下错误:Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
我对Docker不太熟悉,所以我可能误会了一些东西。我四处搜寻,但是我能找到的大多数信息是关于对包括MySQL在内的整个Rails项目进行Docker化的,这不是我想要做的。
预先感谢您的任何建议!
最佳答案
您的MySQL实例通过端口3306在本地主机上公开。您必须配置Rails来使用它,例如:
development:
adapter: mysql2
encoding: utf8
database: my_db_name
username: root
password: my_password
host: 127.0.0.1
port: 3306
或使用环境变量:
export DATABASE_URL=mysql2://root:@127.0.0.1
有关详细信息,请参见this post和rails doc。
当前,您正在尝试通过
/tmp/mysql.sock
上的套接字访问MySQL,但是这里没有可用的内容,因为您的MySQL实例运行到其容器中。
关于mysql - 在本地开发Rails项目时如何在Docker上使用MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61136449/