mysql - 在本地开发Rails项目时如何在Docker上使用MySQL

标签 mysql ruby-on-rails docker

我正在尝试在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 postrails doc

    当前,您正在尝试通过/tmp/mysql.sock上的套接字访问MySQL,但是这里没有可用的内容,因为您的MySQL实例运行到其容器中。

    关于mysql - 在本地开发Rails项目时如何在Docker上使用MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61136449/

    相关文章:

    php - laravel 5.4 ownsTo 和 hasMany 不适用于 2 个外键

    MySQL UNION 似乎无法正常工作

    ruby-on-rails - 仅当用户在 root_path 上时才在登录后重定向用户

    docker - Kubernetes部署中的Docker基本镜像更新

    mysql - 将 SQL 结果格式化为总和

    mysql - 为什么docker使用缓存mysql数据而不是最新的mysql dump?

    ruby-on-rails - 如何从我的应用程序中启动 Heroku One-Off Dynos?

    ruby-on-rails - rails : rake db:create:all (could not connect to server)

    azure - docker compose 上 Azurite 的自定义存储帐户

    memory - 更新 docker 中现有容器的内存/CPU 限制