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

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

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

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

复制代码
针对特定地址开放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”)
解决:sql

找到本身MySQL数据库配置文件的位置,编辑
/etc/mysql/mysql.conf.d# vi mysqld.cnf
将 bind 127.0.0.1 注释掉docker

开放远程链接后,会出现第二个问题:
"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;
刷新app

重启数据库
/etc/init.d/mysql stop
/etc/init.d/mysql starttcp


再从docker访问数据库的时候就能够了
root@2395caf9da2b:~/backends# telnet 172.17.0.1 3306
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is '^]'.ide


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

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

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

 
 
相关文章
相关标签/搜索