Docker容器使用宿主機(jī)上的mongod/redis等服務(wù)詳解
我們?cè)诒镜氐拈_發(fā)中為了保證大家都開發(fā)環(huán)境一直,PHP 的擴(kuò)展,版本保持一致, 我們使用了 docker .但是由于redis/mongodb 在宿主機(jī)上, 所以通過(guò) 127.0.0.1 是連接不上的
前提說(shuō)明
這個(gè)是在 docker 運(yùn)行容器時(shí)使用的橋接模式(默認(rèn)) 時(shí)才會(huì)發(fā)生以上問(wèn)題.如果使用 host 模式就沒有.
所以,我們就是要把是 docker 的網(wǎng)絡(luò)模式設(shè)置為 host 模式.
具體實(shí)現(xiàn)
~ docker run --network host php56
補(bǔ)充說(shuō)明
使用了 host 模式后,則表示宿主機(jī)與容器共享宿主機(jī)的 IP,端口. 如果不希望與宿主機(jī)共享,則不能使用這種方式
如果你的電腦是 Mac, 并且你的docker 版本大于18.03,則你可以在代碼中使用 docker.for.mac.localhost 來(lái)連接宿主機(jī)上的服務(wù).
//使用示例
//以連接 mongod 為例
$mongodb = new \MongoDB\Driver\Manager('mongodb://docker.for.mac.localhost/:27017');
Windows 跟 Linux 暫時(shí)還沒有發(fā)現(xiàn)可以在橋接模式下可以通過(guò)特使字符來(lái)使用宿主機(jī)上服務(wù)的方法。
如果各位有好的方法,歡迎留言討論。
補(bǔ)充知識(shí):Docker無(wú)法連接宿主機(jī)數(shù)據(jù)庫(kù)
redis
已經(jīng)修改過(guò)為宿主機(jī) ifconfig命令下 docker0的 172.17.0.1 連接地址,還是無(wú)法連接redis
docker中redis配置信息
# redis配置信息 REDIS_HOST = '172.17.0.1' REDIS_PORT = 6379 LEVEL_NAME = logging.DEBUG # session配置 SESSION_TYPE = 'redis' # 設(shè)置redis存儲(chǔ)的類型 SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 指定session存儲(chǔ)的redis服務(wù)器 SESSION_USE_SIGNER = True # 設(shè)置簽名存儲(chǔ)
不利用守護(hù)方式啟動(dòng)容器,可以看到redis、mysql連接數(shù)據(jù)庫(kù)報(bào)錯(cuò)
解決辦法
修改redis.conf文件第69行,把 bind 127.0.0.1 改為 0.0.0.0
redis恢復(fù)連接
mysql
class ProductConfig(Config): # 數(shù)據(jù)庫(kù)配置信息 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@172.17.0.1:3306/information' SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_COMMIT_ON_TEARDOWN = True # 每當(dāng)改變數(shù)據(jù)內(nèi)容之后,在視圖函數(shù)結(jié)束的時(shí)候會(huì)自動(dòng)提交 DEBUG = False LEVEL_NAME = logging.ERROR
以權(quán)限用戶root登錄
選擇mysql庫(kù)
查看mysql庫(kù)中的user表的host值(即可進(jìn)行連接訪問(wèn)的主機(jī)/IP名稱)
改host值(以通配符%的內(nèi)容增加主機(jī)/IP地址),當(dāng)然也可以直接增加IP地址
刷新MySQL的系統(tǒng)權(quán)限相關(guān)表
MariaDB [(none)]> use mysql; MariaDB [mysql]> SELECT user, host FROM mysql.user MariaDB [mysql]> update user set host = '%' where user ='root' and host='localhost'; MariaDB [(mysql)]> flush privileges;
測(cè)試一下
問(wèn)題解決
這兩種開放所有地址訪問(wèn)都會(huì)有安全隱患
以上這篇Docker容器使用宿主機(jī)上的mongod/redis等服務(wù)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java讀取properties文件的方法實(shí)例分析
這篇文章主要介紹了java讀取properties文件的方法,實(shí)例分析了java讀取在項(xiàng)目中與不在項(xiàng)目中properties文件的相關(guān)技巧,需要的朋友可以參考下2015-06-06SpringCloud超詳細(xì)講解Feign聲明式服務(wù)調(diào)用
Feign可以把Rest的請(qǐng)求進(jìn)行隱藏,偽裝成類似Spring?MVC的Controller一樣。不用再自己拼接url,拼接參數(shù)等等操作,一切都交給Feign去做2022-06-06JAVA基于Slack實(shí)現(xiàn)異常日志報(bào)警詳解
這篇文章主要為大家介紹了JAVA基于Slack實(shí)現(xiàn)異常日志報(bào)警詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Spring Boot應(yīng)用Docker化的步驟詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用Docker化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04SpringCloud Eureka Provider及Consumer的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud Eureka 提供者及調(diào)用者的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10使用純java config來(lái)配置spring mvc方式
這篇文章主要介紹了使用純java config來(lái)配置spring mvc方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java編程實(shí)現(xiàn)鄰接矩陣表示稠密圖代碼示例
這篇文章主要介紹了Java編程實(shí)現(xiàn)鄰接矩陣表示稠密圖代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11關(guān)于Idea中的.properties文件顯示問(wèn)題
這篇文章主要介紹了關(guān)于Idea中的.properties文件顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07