1. 程式人生 > 其它 >docker容器訪問宿主機mysql資料庫

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可能不同,需要查下自己的是多少)

解決方法:

  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配置即可