[英]docker-compose : Unable to connect Rails app to Mysql
I'm trying use Docker compose and Dockerfile to connect my Ruby on Rails app to Mariadb database and importing a database (.sql file) to this database. 我正在尝试使用Docker compose和Dockerfile将我的Ruby on Rails应用程序连接到Mariadb数据库,并将数据库(.sql文件)导入到该数据库。
I'm using gem 'mysql2', '>= 0.3.18', '< 0.5'
我正在使用
gem 'mysql2', '>= 0.3.18', '< 0.5'
In config/database.yml I tried: 在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
I also tried replacing the above with the following: 我还尝试将以下内容替换为以下内容:
default: &default
url: <%= ENV['DATABASE_URL'] %>
development:
<<: *default
In Dockerfile I added: 在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/
In docker-compose.yml : 在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
In .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
The error I got for my last attempt was: 我最后一次尝试的错误是:
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
How can I fix this issue and succeed to connect rails app with mariadb through Docker compose? 如何解决此问题,并通过Docker compose成功将Rails应用程序与mariadb连接?
Any help please? 有什么帮助吗?
Try change database.yml
to 尝试将
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
Also remove DATABASE_URL
from bundle exec rake
in Dockerfile 同时从Dockerfile中的
bundle exec rake
中删除DATABASE_URL
You trying to connect database on 127.0.0.1
but really your DB locate on another docker container in same network, in 您试图连接
127.0.0.1
数据库,但实际上您的数据库位于同一网络中的另一个docker容器中,
links:
- mysql:sql_srv
- redis
- elasticsearch
you pass to rails_app
service link to database service and set alias to sql_srv
您将
rails_app
服务链接传递到数据库服务,并将别名设置为sql_srv
From rails app you can connect to database use that link wich will be resolved in docker network to mysql
service. 从Rails应用程序,您可以连接到数据库,使用该链接,这将在docker网络中解析为
mysql
服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.