博主最近遇到一種情況法瑟,從服務器拷貝了一份數(shù)據(jù)庫在宿主機Mysql服務器上掩完,想要用本地的數(shù)據(jù)庫測試自己的代碼正確性扼劈,但是項目程序都是靠docker一鍵部署的往枷,于是必定要在docker容器里訪問到本地的數(shù)據(jù)庫。在探索中遇到了問題并得到了解決重慢。
在docker容器里localhost并不是指宿主機的localhost
由此原因饥臂,并不能在容器中通過localhost:3306訪問到宿主機的mysql
docker在運行時就建立了虛擬網(wǎng)卡,并命名為docker0
我們可以在宿主機上運行ifconfig看到它似踱,這就是宿主機建立的網(wǎng)橋,用于與各個容器之間通信
宿主機在與容器同一局域網(wǎng)的IP地址一般是docker0對應的IP地址段的首個地址(如172.0.17.1)
我們可以在容器里通過172.0.17.1:3306訪問到宿主機的mysql服務器
mysql服務器默認的設置為允許127.0.0.1段的ip地址訪問
所以此時用172.0.17.1:3306仍然無法訪問到宿主機
此時需要在設置一下mysql
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>flush privileges;
// 其中各字符的含義:
// *.* 對任意數(shù)據(jù)庫任意表有效
// "root" "123456" 是數(shù)據(jù)庫用戶名和密碼
// '%' 允許訪問數(shù)據(jù)庫的IP地址稽煤,%意思是任意IP核芽,也可以指定IP
// flush privileges 刷新權(quán)限信息