docker 容器无法通过 IP 访问宿主机

问题:

一次部署项目过程中,将Java项目与中间件服务部署在同一远程机器上,出现连接不上中间件服务的问题,而项目在本地运行时是可以连接的,没有问题。

原因:

这是因为项目与服务都是通过docker容器运行的,而docker 容器无法通过 IP 访问宿主机(貌似高版本解决了这个问题),所以导致部署到同一机器后出现问题

解决:

一、Docker社区有提过该问题已被解决,链接在这

二、也可以通过在容器运行时 加参数--net=host,这个命令让容器与宿主机共享网络命名空间,这样容器就可以直接使用宿主机的IP地址进行访问,但该方案局限性在于只能有一个容器使用--net=host参数。

三、若想同时运行多个容器并使它们可以通过IP访问宿主机,可以采用桥接网络模式,步骤如下:

1.创建Docker网络:
运行下面的命令来创建一个桥接网络:

docker network create --driver bridge mynetwork

这将创建一个名为mynetwork的桥接网络,用于连接宿主机和容器。

2.运行容器并指定网络:
在启动容器时,使用 --network 参数并指定之前创建的桥接网络:

docker run --network=mynetwork <image_name>

<image_name>是你要运行的容器镜像的名称。运行该命令后,容器将与mynetwork网络连接。

3.在容器中访问宿主机:
在容器内部,可以使用宿主机的IP地址进行访问。宿主机的IP地址通常是桥接网络的网关地址。

运行下面的命令来查看桥接网络的网关地址:

docker network inspect mynetwork

在输出中,找到"Gateway": "<gateway_ip>",记录下<gateway_ip>的值。

在容器内部,可以使用 <gateway_ip> 来访问宿主机上的服务或应用程序。

现在,你的容器应该能够通过桥接网络访问宿主机了。你可以在容器内部使用宿主机的IP地址(即桥接网络的网关地址)来访问宿主机上的服务或应用程序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值