使用docker-compose链接rails和mysql

时间:2018-01-26 04:39:58

标签: docker docker-compose

我正在尝试在docker中运行基本的rails + mysql应用程序。 我的码头组成如下:

version: '2'
services:
  db:
    image: mysql:5.7.12
    ports:
      - "3307:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: .
    command: bundle exec rails s -p 3000
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    links:
      - db
    depends_on:
      - db

我的数据库使用docker-compose up db构建得很好,但我的网络服务似乎无法找到数据库。试图将所有内容组合在一起docker-compose up会产生以下错误:

web_1  | /usr/local/bundle/gems/mysql2-0.3.21/lib/mysql2/client.rb:70:in `connect': 
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) (Mysql2::Error)

如何让容器正确链接?

编辑:答案在我的database.yml文件中。根据接受的答案,我不得不改变

development:
  host: localhost
我的database.yml

中的

development:
  host: db (my container name)
  port: 3306

然后另外使用docker-compose.yml

中的MYSQL_DATABASE名称更新我的database.yml数据库环境

1 个答案:

答案 0 :(得分:2)

您需要为rails应用程序定义数据库设置。 现在,app尝试连接到本地数据库。

  

无法通过socket'/var/run/mysqld/mysqld.sock'连接本地MySQL服务器(2)(Mysql2 :: Error)

尝试以下设置:

host: db
port: 3306