我有一个正在Docker中运行的Rails应用程序。我想在单独的容器中运行MySQL并将两者连接。

我的docker-compose.yml文件如下所示:

# docker-compose.yml
db:
  image: "mysql:5.6"
  ports:
    - 3306
  environment:
    MYSQL_ROOT_PASSWORD: pass
    MYSQL_DATABASE: dbname
    MYSQL_USER: user
    MYSQL_PASSWORD: pass
web:
  build: .
  ports:
    - "80:80"
  env_file:
    - .env.development
  links:
    - db
  volumes:
    - "/webapp:/home/app/webapp"

当我运行docker-machine ip default时,我得到192.168.99.100

当我运行docker ps时,我看到mysql在端口上运行:3306/tcp, 0.0.0.0:32782->32781/tcp 编辑:删除mysql容器并重新启动它之后,该端口实际上是0.0.0.0:32784->3306/tcp

我正在使用Sequel gem,并使用以下参数连接到我的数据库:
 Sequel::Model.db = Sequel.connect(adapter:  'mysql2',
                              database: 'dbname',
                              user:     'user',
                              password: 'pass',
                              host:     '192.168.99.100',
                              port:     '3306',
                              loggers: [logger] )

当我运行我的应用程序时,我得到:
rake aborted!
Sequel::DatabaseConnectionError: Mysql2::Error: Can't connect to MySQL server on '192.168.99.100' (111)
/var/lib/gems/2.0.0/gems/mysql2-0.3.18/lib/mysql2/client.rb:70:in `connect'
/var/lib/gems/2.0.0/gems/mysql2-0.3.18/lib/mysql2/client.rb:70:in `initialize'
/var/lib/gems/2.0.0/gems/sequel-4.23.0/lib/sequel/adapters/mysql2.rb:36:in `new'
/var/lib/gems/2.0.0/gems/sequel-4.23.0/lib/sequel/adapters/mysql2.rb:36:in `connect'
/var/lib/gems/2.0.0/gems/sequel-4.23.0/lib/sequel/connection_pool.rb:101:in `make_new'
// Lots more traces

有任何想法我在这里做错了吗?

最佳答案

尝试在连接设置中将链接名称用作“主机”。将IP地址更改为“db”。

10-08 11:00
查看更多