docker容器訪問宿主機mysql數據庫


今天用docker部署一個web服務時遇到總是連不上宿主機mysql數據庫的問題,報SQLSTATE[HY000] [2002] Connection refused,經過測試,宿主機用相同配置可以連上,登入docker容器內就連不上,初步判斷容器內通過localhost或127.0.0.1是連不上宿主機的。具體原因和解決方法如下:

原因:

  1. docker容器內的localhost並不是指宿主機的localhost

  2. docker在運行時就建立了虛擬網卡,並命名為docker0,在宿主機ifconfig可以看到網橋的ip是172.17.0.1(不同機器或者docker版本ip可能不同,需要查下自己的是多少)

image

解決方法:

  1. 在容器內通過172.17.0.1:3306訪問宿主機的mysql
$ docker exec -it 8686d3dda02c /bin/sh
 $ mysql -ushowx -p --database showx -P3306 -h172.17.0.1  #可以看到連上了,只是ip沒有訪問授權
ERROR 1130 (HY000): Host '172.17.0.2' is not allowed to connect to this MySQL server
  1. 設置宿主機mysql允許docker0的虛擬網卡ip訪問
# 宿主機mysql設置允許用戶showx通過172.17.0.2訪問showx數據庫的任意表
$ mysql -uroot -p
 mysql>GRANT ALL PRIVILEGES ON showx.* TO 'showx'@'172.17.0.2' IDENTIFIED BY 'password' WITH GRANT OPTION; 
 mysql>flush privileges; 

# docker內測試docker0 ip鏈接
$ docker exec -it 8686d3dda02c /bin/sh
$ mysql -ushowx -p --database showx -P3306 -h172.17.0.1
MySQL [showx]>
  1. 修改容器web服務的db ip配置即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM