在 Docker 容器中访问宿主机上运行的服务,可以使用特殊的主机名 host.docker.internal
。这个主机名在 Docker 版本 18.03 或更高版本中被引入,它会自动解析为宿主机的 IP 地址。
假设宿主机上运行着一个服务(例如,一个 Web 服务器)并监听在宿主机的某个端口上,可以在 Docker 容器内使用 host.docker.internal
作为主机名来访问该服务。
下面是一个使用 host.docker.internal
访问宿主机服务的示例:
如:我在Docker容器中部署了Nginx,并且想要通过Docker容器内的Nginx代理到在宿主机上的运行Java程序。
-
在Docker中启动Nginx容器,并将容器的端口映射到主机上的某个端口。例如,将容器的80端口映射到主机的8080端口:
docker run -d --name nginx-container -p 8080:80 nginx
这将在Docker中启动一个名为
nginx-container
的Nginx容器,并将容器的80端口映射到主机的8080端口。 -
在主机上安装和配置Java程序,确保它在主机的某个端口上运行。假设我的Java程序在主机的8000端口上运行。
-
在主机的Nginx配置中添加一个反向代理规则,将Nginx容器中的请求代理到主机上的Java程序。
在Nginx配置文件中找到
server
块,并添加以下配置:server { listen 80; server_name example.com; location / { proxy_pass http://host.docker.internal:8000; } }
这里使用了
host.docker.internal
这个特殊的主机名,它会解析为主机(宿主机)的IP地址。8000
是主机上Java程序监听的端口。 -
这样,当我通过主机的8080端口访问Nginx容器时,Nginx将会代理这些请求并将它们转发到主机上运行的Java程序的8000端口。文章来源:https://www.toymoban.com/news/detail-679041.html
请注意,host.docker.internal
只适用于从容器内部访问宿主机。如果你想要在容器之间进行通信,可以使用容器名称或 IP 地址。文章来源地址https://www.toymoban.com/news/detail-679041.html
到了这里,关于在 Docker 容器中访问宿主机(localhost)上运行的服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!