Techioz Blog

Rails から MySQL Docker コンテナへの接続

概要

以下に docker-compose とデータベースの構成ファイルを提供しました。 Rails アプリをコンテナ化された mysql インスタンスに接続しようとしています。

# docker-compose.yml
version: '3'
services:
  db:
    image: mysql:latest
    container_name: appname-mysql
    environment:
      MYSQL_ROOT_PASSWORD: approot
      MYSQL_DATABASE: appdb
      MYSQL_USER: app_user
      MYSQL_PASSWORD: app!
    ports:
      - "3309:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:
# database.yml
development:
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: 127.0.0.1 # i have tried 'db' and 'appname-mysql'
  username: root
  password: papercliproot

host: 127.0.0.1 に設定すると、「ActiveRecord::DatabaseConnectionError: ユーザー名/パスワード、ユーザー名:paperclip_user を使用してデータベースに接続する際に問題が発生しました」というエラーが表示されます。 (ActiveRecord::DatabaseConnectionError)

何か助けはありますか?

ホストを127.0.0.1に設定し、docker-compose.ymlファイルで定義されたコンテナ名dbを使用してみました。コンテナ自体の名前である appname-mysql も試してみました。

解決策

この問題は、database.yml ファイルに port オプションを追加することで解決されました。

development:
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: 127.0.0.1
  username: paperclip_user
  password: paperclip!
  database: paperclipdb
  port: 3309