本地主机在Docker容器中是什么意思?

Ale*_*lar 1 linux docker

说,如果我在Docker容器中使用此命令。

/opt/lampp/bin/mysql -h localhost -u root -pThePassword
Run Code Online (Sandbox Code Playgroud)

这里的本地主机指的是什么?主机的IP还是Docker容器自己的IP?

Dav*_*aze 7

从容器内部开始localhost始终引用当前容器。它永远不会引用另一个容器,也永远不会引用物理系统中运行的不在同一容器中的任何其他内容。建立与数据库主机的出站连接localhost或将其配置localhost为数据库主机通常没有用。

从主机系统上的Shell中localhost可以指代在Docker之外的系统上运行的守护程序,或者指代您已使用docker run -p选件发布的端口。

在不同的系统中localhost是指从其调用的系统。

就IP地址而言localhost始终为127.0.0.1,并且该IP地址是特殊的,并且始终localhost且其行为与上述相同。


如果要连接到容器...

...从另一个容器中,最好的方法是确保它们位于相同的Docker网络上(您是从相同的Docker Compose YAML文件启动的;您先做了一个docker network create,然后docker run --net ...在同一网络上进行了操作)并使用Docker的内部DNS服务可以通过--nameDocker Compose YAML文件中的容器名称或容器内部的端口号来引用它们。即使目标具有已发布的带有docker run -p选项或Docker Compose ports:设置的端口,也要使用第二个(容器内部的)端口号。

...从Docker空间外部,确保您使用docker run -p或Docker Compose ports:选项启动了容器,并使用该选项中的第一个端口号连接到主机的 IP地址或DNS名称。

...从同一物理主机上的终端窗口或浏览器而不是在容器中,在这种情况下(仅在这种情况下)localhost将始终运行。


除:

如果您使用来启动容器--net host,则localhost指的是物理主机,并且您处于“同一物理主机上的终端窗口”场景中。

如果您不愿意在同一个容器中拥有多个服务器,则可以使用localhost它们之间进行通信。

如果您在Kubernetes中运行,并且同一容器中有多个容器,则可以使用localhost它们在它们之间进行通信。在Pod之间,您应该在每个Pod /部署之前设置服务,并使用形式的DNS名称service-name.namespace-name.svc.cluster.local

  • 请参阅[从 Docker 容器内部,如何连接到计算机的本地主机?](/sf/ask/1702376371/我连接到机器的本地主机?rq=1)。 (2认同)