簡體   English   中英

docker-compose:無法將Rails應用程序連接到Mysql

[英]docker-compose : Unable to connect Rails app to 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:somepassword@127.0.0.1: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:somepassword@127.0.0.1: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:somepasssword@127.0.0.1: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:somepassword@127.0.0.1:3306/mydatabase SECRET_TOKEN=sometoken assets:precompile' returned a non-zero code: 1

如何解決此問題,並通過Docker compose成功將Rails應用程序與mariadb連接?

有什么幫助嗎?

嘗試將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

同時從Dockerfile中的bundle exec rake中刪除DATABASE_URL

您試圖連接127.0.0.1數據庫,但實際上您的數據庫位於同一網絡中的另一個docker容器中,

links:
  - mysql:sql_srv
  - redis
  - elasticsearch

您將rails_app服務鏈接傳遞到數據庫服務,並將別名設置為sql_srv

從Rails應用程序,您可以連接到數據庫,使用該鏈接,這將在docker網絡中解析為mysql服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM