Docker 容器使用 net=host 模式时出现 “Failed to connect to localhost port” 解决方法

阅读时长 3 分钟读完

在使用 Docker 进行应用部署时,我们经常会使用 net=host 模式来实现容器与主机共享网络。但是,在某些情况下,我们会遇到一个问题:当容器尝试连接主机上的某个端口时,会出现“Failed to connect to localhost port”的错误。

这个问题的原因是容器中的 localhost 并不是指向主机上的 localhost,而是指向容器本身。因此,当容器尝试连接主机上的端口时,实际上是在尝试连接容器自身的端口,从而导致连接失败。

为了解决这个问题,我们需要修改容器中的 localhost 指向,使其指向主机上的 localhost。以下是解决方法:

解决方法

要解决这个问题,我们需要在启动容器时添加一个参数,即 --add-host 参数。该参数可以将主机上的 IP 地址添加到容器的 /etc/hosts 文件中,从而使容器中的 localhost 指向主机上的 localhost。

具体来说,我们需要使用以下命令启动容器:

在上面的命令中,--add-host 参数用于将 host.docker.internal(Docker Desktop for Mac 和 Windows 上的主机名)映射到主机的网关地址,从而使容器中的 localhost 指向主机上的 localhost。

示例代码

以下是一个使用 net=host 模式的示例 Dockerfile:

-- -------------------- ---- -------
---- --------------

------- ----

---- ------------ -
---- --------- -

--- ---- ------- ------------ -----------------

---- - -

--- -------- --------

以下是一个使用 --add-host 参数的示例启动命令:

总结

在使用 Docker 进行应用部署时,我们经常会使用 net=host 模式来实现容器与主机共享网络。但是,在某些情况下,我们会遇到一个问题:当容器尝试连接主机上的某个端口时,会出现“Failed to connect to localhost port”的错误。为了解决这个问题,我们需要使用 --add-host 参数将主机上的 IP 地址添加到容器的 /etc/hosts 文件中,从而使容器中的 localhost 指向主机上的 localhost。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66021e54d10417a222d85d1e

纠错
反馈