問題:
一次部署項(xiàng)目過程中,將Java項(xiàng)目與中間件服務(wù)部署在同一遠(yuǎn)程機(jī)器上,出現(xiàn)連接不上中間件服務(wù)的問題,而項(xiàng)目在本地運(yùn)行時(shí)是可以連接的,沒有問題。
原因:
這是因?yàn)轫?xiàng)目與服務(wù)都是通過docker容器運(yùn)行的,而docker 容器無法通過 IP 訪問宿主機(jī)(貌似高版本解決了這個(gè)問題),所以導(dǎo)致部署到同一機(jī)器后出現(xiàn)問題
解決:
一、Docker社區(qū)有提過該問題已被解決,鏈接在這
二、也可以通過在容器運(yùn)行時(shí) 加參數(shù)--net=host,這個(gè)命令讓容器與宿主機(jī)共享網(wǎng)絡(luò)命名空間,這樣容器就可以直接使用宿主機(jī)的IP地址進(jìn)行訪問,但該方案局限性在于只能有一個(gè)容器使用--net=host參數(shù)。
三、若想同時(shí)運(yùn)行多個(gè)容器并使它們可以通過IP訪問宿主機(jī),可以采用橋接網(wǎng)絡(luò)模式,步驟如下:
1.創(chuàng)建Docker網(wǎng)絡(luò):
運(yùn)行下面的命令來創(chuàng)建一個(gè)橋接網(wǎng)絡(luò):
docker network create --driver bridge mynetwork
這將創(chuàng)建一個(gè)名為mynetwork
的橋接網(wǎng)絡(luò),用于連接宿主機(jī)和容器。
2.運(yùn)行容器并指定網(wǎng)絡(luò):
在啟動(dòng)容器時(shí),使用?--network
?參數(shù)并指定之前創(chuàng)建的橋接網(wǎng)絡(luò):
docker run --network=mynetwork <image_name>
<image_name>
是你要運(yùn)行的容器鏡像的名稱。運(yùn)行該命令后,容器將與mynetwork
網(wǎng)絡(luò)連接。
3.在容器中訪問宿主機(jī):
在容器內(nèi)部,可以使用宿主機(jī)的IP地址進(jìn)行訪問。宿主機(jī)的IP地址通常是橋接網(wǎng)絡(luò)的網(wǎng)關(guān)地址。
運(yùn)行下面的命令來查看橋接網(wǎng)絡(luò)的網(wǎng)關(guān)地址:
docker network inspect mynetwork
在輸出中,找到"Gateway": "<gateway_ip>"
,記錄下<gateway_ip>
的值。
在容器內(nèi)部,可以使用?<gateway_ip>
?來訪問宿主機(jī)上的服務(wù)或應(yīng)用程序。文章來源:http://www.zghlxwxcb.cn/news/detail-704884.html
現(xiàn)在,你的容器應(yīng)該能夠通過橋接網(wǎng)絡(luò)訪問宿主機(jī)了。你可以在容器內(nèi)部使用宿主機(jī)的IP地址(即橋接網(wǎng)絡(luò)的網(wǎng)關(guān)地址)來訪問宿主機(jī)上的服務(wù)或應(yīng)用程序。文章來源地址http://www.zghlxwxcb.cn/news/detail-704884.html
到了這里,關(guān)于docker 容器無法通過 IP 訪問宿主機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!