在 Docker 容器中訪問宿主機(jī)上運(yùn)行的服務(wù),可以使用特殊的主機(jī)名 host.docker.internal
。這個(gè)主機(jī)名在 Docker 版本 18.03 或更高版本中被引入,它會(huì)自動(dòng)解析為宿主機(jī)的 IP 地址。
假設(shè)宿主機(jī)上運(yùn)行著一個(gè)服務(wù)(例如,一個(gè) Web 服務(wù)器)并監(jiān)聽在宿主機(jī)的某個(gè)端口上,可以在 Docker 容器內(nèi)使用 host.docker.internal
作為主機(jī)名來訪問該服務(wù)。
下面是一個(gè)使用 host.docker.internal
訪問宿主機(jī)服務(wù)的示例:
如:我在Docker容器中部署了Nginx,并且想要通過Docker容器內(nèi)的Nginx代理到在宿主機(jī)上的運(yùn)行Java程序。
-
在Docker中啟動(dòng)Nginx容器,并將容器的端口映射到主機(jī)上的某個(gè)端口。例如,將容器的80端口映射到主機(jī)的8080端口:
docker run -d --name nginx-container -p 8080:80 nginx
這將在Docker中啟動(dòng)一個(gè)名為
nginx-container
的Nginx容器,并將容器的80端口映射到主機(jī)的8080端口。 -
在主機(jī)上安裝和配置Java程序,確保它在主機(jī)的某個(gè)端口上運(yùn)行。假設(shè)我的Java程序在主機(jī)的8000端口上運(yùn)行。
-
在主機(jī)的Nginx配置中添加一個(gè)反向代理規(guī)則,將Nginx容器中的請(qǐng)求代理到主機(jī)上的Java程序。
在Nginx配置文件中找到
server
塊,并添加以下配置:server { listen 80; server_name example.com; location / { proxy_pass http://host.docker.internal:8000; } }
這里使用了
host.docker.internal
這個(gè)特殊的主機(jī)名,它會(huì)解析為主機(jī)(宿主機(jī))的IP地址。8000
是主機(jī)上Java程序監(jiān)聽的端口。 -
這樣,當(dāng)我通過主機(jī)的8080端口訪問Nginx容器時(shí),Nginx將會(huì)代理這些請(qǐng)求并將它們轉(zhuǎn)發(fā)到主機(jī)上運(yùn)行的Java程序的8000端口。文章來源:http://www.zghlxwxcb.cn/news/detail-679041.html
請(qǐng)注意,host.docker.internal
只適用于從容器內(nèi)部訪問宿主機(jī)。如果你想要在容器之間進(jìn)行通信,可以使用容器名稱或 IP 地址。文章來源地址http://www.zghlxwxcb.cn/news/detail-679041.html
到了這里,關(guān)于在 Docker 容器中訪問宿主機(jī)(localhost)上運(yùn)行的服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!