[英]Docker rails can't connect mysql
I am trying to connect mysql database.我正在尝试连接 mysql 数据库。 Here I am using two docker container one for mysql and one for rails.
在这里,我使用了两个 docker 容器,一个用于 mysql,一个用于 Rails。 I am using this docker compose file:
我正在使用这个 docker compose 文件:
version: '3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- ./mydata:/var/lib/mysql
ports:
- "3307:3306"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
When I am running docker compose up and I can see my containers are running my docker ps command show me:当我运行 docker compose up 时,我可以看到我的容器正在运行我的 docker ps 命令显示我:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1bc75bbb4f7 mysql "docker-entrypoint.s…" 22 seconds ago Up 19 seconds 0.0.0.0:3307->3306/tcp aaupf_db_1
2ccb0882c390 aaupf_web "bundle exec rails s…" 12 minutes ago Up 9 minutes 0.0.0.0:3000->3000/tcp aaupf_web_1
I am using this code in my database.yml:我在我的 database.yml 中使用此代码:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: sample_sqlite3_development
pool: 5
username: root
password: password
host: 127.0.0.1
port: 3307
But I am getting this error in rails:但是我在 Rails 中遇到了这个错误:
Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
I can connect mysql using mysql workbench I don't know what do I need to do in order to connect my rails app to mysql.我可以使用 mysql workbench 连接 mysql 我不知道我需要做什么才能将我的 rails 应用程序连接到 mysql。
Try using host: db in your database.yml.尝试在 database.yml 中使用 host: db。 This should link your web and mysql container.
这应该链接您的 web 和 mysql 容器。
https://docs.docker.com/v17.09/compose/rails/#connect-the-database https://docs.docker.com/v17.09/compose/rails/#connect-the-database
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password:
pool: 5
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
Firstly, you should check if you are able to login into mysql from console using command首先,您应该检查是否可以使用命令从控制台登录到 mysql
mysql -u root -p
mysql -u 根 -p
You don't need mysql workbench to connect your docker rails to local database.您不需要 mysql 工作台来将您的 docker rails 连接到本地数据库。
For connecting to local db: docker-compose.yml用于连接到本地数据库:docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: root
MYSQL_PASSWORD: password
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
depends_on:
- db
network_mode: "host"
environment:
DB_USER: root
DB_PASSWORD: password
DB_HOST: 127.0.0.1
The option network_mode: "host" enables connection to local db.选项 network_mode: "host" 启用与本地数据库的连接。
config/database.yml:配置/数据库.yml:
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV['DB_USER'] %>
password: <%= ENV['DB_PASSWORD'] %>
host: <%= ENV['DB_HOST'] %>
development:
<<: *default
Try below one:试试下面的一个:
version: '3'
services:
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USERNAME: root
MYSQL_PASSWORD: root
ports:
- "3306:3306"
volumes:
- ./tmp/db_data:/var/lib/mysql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.