容器宿主机数据库_解决Docker容器内访问宿主机MySQL数据库服务器的问题
懶得描述太多,總歸是解決了問(wèn)題,方法簡(jiǎn)要記錄如下,雖然簡(jiǎn)要,但是完整,一來(lái)紀(jì)念處理該問(wèn)題耗費(fèi)的大半天時(shí)間,二來(lái)本著共享精神幫助其他遇到該問(wèn)題的哥們兒,當(dāng)然這個(gè)方法并不一定能解決你們的問(wèn)題,但是多少能提供些解決思路.
第一,先檢查防火墻,通常應(yīng)該沒(méi)什么問(wèn)題
(問(wèn)題解決之后我把這塊規(guī)則去掉了,發(fā)現(xiàn)沒(méi)什么影響,所以容器的話,可能docker已經(jīng)解決了防火墻的問(wèn)題,但是不排除其他人會(huì)有這個(gè)問(wèn)題.)
添加規(guī)則
針對(duì)特定地址開(kāi)放3306端口,一定程度上保證數(shù)據(jù)庫(kù)的安全
iptables -I INPUT -s 172.17.0.2 -p tcp --dport 3306 -j ACCEPT
展示當(dāng)前規(guī)則
iptables-save
將規(guī)則輸出至文件
iptables-save > iptables.rules.backup
將文件內(nèi)規(guī)則導(dǎo)出至當(dāng)前防火墻,規(guī)則生效
iptables-restore < iptables.rules.backup
第二,修改MySQL配置文件,將綁定的配置注釋掉,然后添加數(shù)據(jù)庫(kù)user表中root用戶Host記錄,使該用戶可以在該IP地址遠(yuǎn)程連接數(shù)據(jù)庫(kù)
引起的問(wèn)題:
Can’t connect to MySQL server on (111 “Connection refused”)
解決:
找到自己MySQL數(shù)據(jù)庫(kù)配置文件的位置,編輯
/etc/mysql/mysql.conf.d# vi mysqld.cnf
將 bind 127.0.0.1 注釋掉
開(kāi)放遠(yuǎn)程連接后,會(huì)出現(xiàn)第二個(gè)問(wèn)題:
"Host '172.17.0.2' is not allowed to connect to this MySQL server"
解決辦法:
root 進(jìn)入數(shù)據(jù)庫(kù),執(zhí)行下方兩行命令:
grant all privileges on *.* to 'root'@'172.17.0.2' identified by 'pswd' with grant option;
開(kāi)放所有權(quán)限給root,當(dāng)root以pswd(不一定是root登錄密碼,僅作為情景下登錄的密碼)密碼從 172.17.0.2 登入的時(shí)候,允許其操作所有數(shù)據(jù)庫(kù)下的所有表(也可以將 *.* 改成特定數(shù)據(jù)庫(kù)下的特定表,這個(gè)隨意).
flush privileges;
刷新
重啟數(shù)據(jù)庫(kù)
/etc/init.d/mysql stop
/etc/init.d/mysql start
再?gòu)膁ocker訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候就可以了
root@2395caf9da2b:~/backends# telnet 172.17.0.1 3306
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is '^]'.
這樣的結(jié)果就是,僅開(kāi)放一個(gè)IP地址的權(quán)限
注意,網(wǎng)上有許多好心的哥們兒也提供了修改的命令,grant all privileges on *.* to 'root'@'%' identified by 'pswd' with grant option;
就是把IP地址改成了%,這樣的結(jié)果就是當(dāng)root從任意機(jī)器遠(yuǎn)程連接的時(shí)候只要密碼正確,都會(huì)接受,一勞永逸,不過(guò)這樣多少優(yōu)點(diǎn)安全隱患,自己把握吧.
總結(jié)
以上是生活随笔為你收集整理的容器宿主机数据库_解决Docker容器内访问宿主机MySQL数据库服务器的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 成都大熊猫基地几点开门
- 下一篇: hsql mybatis 表不存在_单元