在 Docker 容器中访问宿主机(localhost)上运行的服务

在 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
1
这将在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端口。

请注意,host.docker.internal 只适用于从容器内部访问宿主机。如果你想要在容器之间进行通信,可以使用容器名称或 IP 地址。
————————————————
版权声明:本文为CSDN博主「是庸庸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45225492/article/details/131562311

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值