容器宿主机数据库_解决Docker容器内访问宿主机MySQL数据库服务器的问题

懒得描述太多,总归是解决了问题,方法简要记录如下,虽然简要,但是完整,一来纪念处理该问题耗费的大半天时间,二来本着共享精神帮助其他遇到该问题的哥们儿,当然这个方法并不一定能解决你们的问题,但是多少能提供些解决思路.

第一,先检查防火墙,通常应该没什么问题

(问题解决之后我把这块规则去掉了,发现没什么影响,所以容器的话,可能docker已经解决了防火墙的问题,但是不排除其他人会有这个问题.)

添加规则

针对特定地址开放3306端口,一定程度上保证数据库的安全

iptables-I INPUT -s 172.17.0.2 -p tcp --dport 3306 -j ACCEPT

展示当前规则

iptables-save

将规则输出至文件

iptables-save >iptables.rules.backup

将文件内规则导出至当前防火墙,规则生效

iptables-restore < iptables.rules.backup

第二,修改MySQL配置文件,将绑定的配置注释掉,然后添加数据库user表中root用户Host记录,使该用户可以在该IP地址远程连接数据库

引起的问题:

Can’t connect to MySQL server on (111 “Connection refused”)

解决:

找到自己MySQL数据库配置文件的位置,编辑

/etc/mysql/mysql.conf.d# vi mysqld.cnf

将 bind 127.0.0.1注释掉

开放远程连接后,会出现第二个问题:

"Host '172.17.0.2' is not allowed to connect to this MySQL server"

解决办法:

root 进入数据库,执行下方两行命令:

grant all privileges on *.* to 'root'@'172.17.0.2' identified by 'pswd' with grant option;

开放所有权限给root,当root以pswd(不一定是root登录密码,仅作为情景下登录的密码)密码从 172.17.0.2 登入的时候,允许其操作所有数据库下的所有表(也可以将 *.* 改成特定数据库下的特定表,这个随意).

flush privileges;

刷新

重启数据库

/etc/init.d/mysql stop

/etc/init.d/mysql start

再从docker访问数据库的时候就可以了

root@2395caf9da2b:~/backends# telnet 172.17.0.1 3306

Trying 172.17.0.1...

Connected to 172.17.0.1.

Escape character is '^]'.

这样的结果就是,仅开放一个IP地址的权限

注意,网上有许多好心的哥们儿也提供了修改的命令,grant all privileges on *.* to 'root'@'%' identified by 'pswd' with grant option;

就是把IP地址改成了%,这样的结果就是当root从任意机器远程连接的时候只要密码正确,都会接受,一劳永逸,不过这样多少优点安全隐患,自己把握吧.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值