【问题标题】:docker-compose rails with mysqldocker-compose rails 与 mysql
【发布时间】:2016-10-06 23:42:38
【问题描述】:

你好,我有很大的问题。 我正在尝试在单独的 docker 容器上运行 rails 和 mysql。 在 docker-compose.yml 我有:

version: '2'
services:
  db:
    image: mysql
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: zzz
      MYSQL_USER: root
      MYSQL_PASSWORD: zzz
      MYSQL_DATABASE: zzz
  web:
    build: .
    command: bundle exec rails s -p 3000
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db

在我的 rails database.yml 中

development:
  adapter: mysql2
  encoding: utf8
  database: zzz
  pool: 5
  username: root
  password: zzz
  host: database.dev //this is host for container with mysql
  port: 3306

当我运行应用程序时结束,我得到了错误: Access denied for user 'root'@'xxx' (using password: YES) 其中 xxx 是 ip 我的机器不是容器。请帮助我不知道该怎么办

【问题讨论】:

  • 当我尝试从我的本地机器( rails s -p 9999 -> localhost:9999 )访问时,一切正常

标签: mysql ruby-on-rails docker docker-compose


【解决方案1】:

您必须link 容器,这应该可以:

version: '2'
services:
  db:
    image: mysql
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: zzz
      MYSQL_USER: root
      MYSQL_PASSWORD: zzz
      MYSQL_DATABASE: zzz
  web:
    build: .
    command: bundle exec rails s -p 3000
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    links:
     - db:sql_srv
    depends_on:
      - db

现在web 容器链接到db 并且sql_srvdb 容器的别名。您应该使用以下地址从web 容器到达db 容器:sql_srv:3306

如果您只想将db 容器连接到web 容器,则实际上不需要在db 容器中指定portsports 属性仅用于从主机到达容器。

【讨论】:

  • 完美运行。你拯救了我的一天。谢谢