gpt4 book ai didi

mysql - 如何将rails应用程序中的mysql与docker连接?

转载 作者:IT老高 更新时间:2023-10-28 21:43:41 25 4
gpt4 key购买 nike

我创建了一个使用 mysql 数据库的 rails 应用程序。现在想将它们放入 docker 容器中。我正在使用 docker、docker-machine、docker-compose。

我的 docker-compose.yml

db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: <%= ENV['MYSQL_ROOT_PASSWORD'] %>
ports:
- "3306:3306"

web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- db

我的配置/database.yml

default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: <%= ENV['MYSQL_ROOT_PASSWORD'] %>
host: <%= ENV['DB_PORT_3306_TCP_ADDR'] %>
port: <%= ENV['DB_PORT_3306_TCP_PORT'] %>

development:
<<: *default
database: myapp_development

test:
<<: *default
database: myapp_test

production:
<<: *default
database: myapp_production

启动应用时

$ docker-compose up
...
sidekiq_1 | Host '172.17.0.5' is not allowed to connect to this MySQL server
...

我的网络环境

$ docker-compose run web env
...
DB_PORT=tcp://172.17.0.3:3306
DB_PORT_3306_TCP=tcp://172.17.0.3:3306
DB_PORT_3306_TCP_ADDR=172.17.0.3
DB_PORT_3306_TCP_PORT=3306
DB_PORT_3306_TCP_PROTO=tcp
WEB_PORT=tcp://172.17.0.6:3000
WEB_PORT_3000_TCP=tcp://172.17.0.6:3000
WEB_PORT_3000_TCP_ADDR=172.17.0.6
WEB_PORT_3000_TCP_PORT=3000
WEB_PORT_3000_TCP_PROTO=tcp
...

我的 docker 机器ip

$ docker-machine ip myapp
192.168.99.100

从浏览器访问:http://192.168.99.100:3000,然后看到错误:

Mysql2::Error
Host '172.17.0.6' is not allowed to connect to this MySQL server

172.17.0.3172.17.0.5172.17.0.6等。为什么他们使用不同的ips?那么如何连接mysql呢? config/database.yml文件中写的hostport我看不懂。

最佳答案

在我的例子中,我在 host 中运行 Rails,在官方镜像 docker 中运行 MySQL。

添加 host: 127.0.0.1 解决了问题。

config/database.yml

default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password:
host: 127.0.0.1

关于mysql - 如何将rails应用程序中的mysql与docker连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com