【问题标题】:docker-compose rails mysql connection refuseddocker-compose rails mysql连接被拒绝
【发布时间】:2021-03-21 11:31:16
【问题描述】:

我在尝试让 docker-compose 包含 Rails API 和 MySQL 等时遇到问题。 在 docker-compose up 并向 Rails API 发送请求后,我收到此错误 "#<Mysql2::Error::ConnectionError: Can't connect to MySQL server on 'database' (111 \"Connection refused\")>"

我的 docker-compose

services:
  database:
    image: mysql:8.0.23
    restart: always
    volumes:
      - 'db_data:/var/lib/mysql'
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USERNAME: root
      MYSQL_PASSWORD: root

  app:
    build: .
    restart: always
    depends_on:
      - 'database'
      - 'redis'
    ports:
      - '3000:3000'
    volumes:
      - '.:/app'
      - 'gem_cache:/usr/local/bundle/gems'
    env_file: .env
    environment:
      RAILS_ENV: development

数据库.yml

default: &default
  adapter: mysql2
  encoding: utf8
  host: <%= ENV['DATABASE_HOST'] %>
  port: <%= ENV['DATABASE_PORT'] || '5432' %>
  username: <%= ENV['DATABASE_USER'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: <%= ENV['DATABASE_NAME_DEV'] %>
...

.env

...
DATABASE_HOST=database
...

这里有什么问题?

【问题讨论】:

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


    【解决方案1】:

    MySQL 使用 3306 作为默认端口,您应该将 3306 分配给 DATABASE_PORT 环境。

    【讨论】:

    • 现在我收到了这个错误Mysql2::Error::ConnectionError: Access denied for user 'root'@'172.22.0.4' (using password: NO)&gt;
    • 也将root 分配给DATABASE_PASSWORD ?