Docker-compose: невозможно подключить приложение Rails к Mysql

Я пытаюсь использовать Docker compose и Dockerfile для подключения моего приложения Ruby on Rails к базе данных Mariadb и импорта базы данных (файл .sql) в эту базу данных.

Я использую gem 'mysql2', '>= 0.3.18', '< 0.5'

В config / database.yml я пробовал:

default: &default
    adapter: mysql2
    encoding: utf8
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    username: root
    password: somepassword
    host: mysql2://root:[email protected]:3306/mydatabase

development:
    <<: *default

Я также попытался заменить вышеперечисленное на следующее:

default: &default
    url: <%= ENV['DATABASE_URL'] %>

development:
    <<: *default

В Dockerfile я добавил:

# after COPY . .

RUN bundle exec rake RAILS_ENV=production DATABASE_URL=mysql2://root:[email protected]:3306/mydatabase SECRET_TOKEN=sometoken assets:precompile

CMD bundle exec unicorn -c config/

В docker-compose.yml:

services:
    mysql:
        image: mariadb:10.3
        container_name: mysql
        volumes:
            - ./database.sql:/docker-entrypoint-initdb.d/database.sql
            - ~/.docker-volumes/database/mysql:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: somepassword
            MYSQL_DATABASE: mydatabase
        ports:
            - '3306:3306'

    rails_app:
        build: .
        restart: always
        container_name: rails_app
        environment:
            DATABASE_URL: mysql2://root:somepassword@mysql/mydatabase
        links:
            - mysql:sql_srv
            - redis
            - elasticsearch
        volumes:
            - .:/rails_app
         ports:
             - '3000:3000'
         env_file:
             - .rails_app.env

В .rails_app.env:

SECRET_KEY_BASE=sometoken
WORKER_PROCESSES=1
LISTEN_ON=127.0.0.1:3000
DATABASE_URL=mysql2://root:[email protected]:3306/mydatabase

Ошибка, которую я получил при моей последней попытке, была:

Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
...
ERROR: Service 'rails_app' failed to build: The command '/bin/sh -c bundle exec rake RAILS_ENV=production DATABASE_URL=mysql2://root:[email protected]:3306/mydatabase SECRET_TOKEN=sometoken assets:precompile' returned a non-zero code: 1

Как я могу исправить эту проблему и успешно подключить приложение rails к mariadb через Docker Compose?

Любая помощь, пожалуйста?

Попробуйте в обоих сервисах раздел network_mode: host

Alejandro Galera 20.06.2018 13:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
679
1

Ответы 1

Попробуйте сменить database.yml на

default: &default
    adapter: mysql2
    encoding: utf8
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    username: root
    password: somepassword
    host: sql_srv
    database: mydatabase
    port: 3306

Также удалите DATABASE_URL из bundle exec rake в Dockerfile.

Вы пытаетесь подключить базу данных на 127.0.0.1, но на самом деле ваша БД находится в другом контейнере докеров в той же сети, в

links:
  - mysql:sql_srv
  - redis
  - elasticsearch

вы переходите к сервису rails_app ссылку на сервис базы данных и устанавливаете псевдоним sql_srv

Из приложения rails вы можете подключиться к базе данных, используя эту ссылку, которая будет разрешена в сети докеров для службы mysql.

что такое sql_srv?

yaswant singh 17.05.2019 13:43

Другие вопросы по теме