小编典典

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

linux

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

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

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


阅读 503

收藏
2020-06-02

共1个答案

小编典典

从容器内部开始
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

2020-06-02