问题:

一次部署项目过程中,将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地址(即桥接网络的网关地址)来访问宿主机上的服务或应用程序。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐