繁体   English   中英

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

[英]What does localhost means inside a Docker container?

比如说,如果我在 docker 容器中使用这个命令。

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

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

从容器内部localhost总是指当前容器。 它从不涉及另一个容器,也从不涉及在您的物理系统上运行但不在同一容器中的任何其他内容。 localhost出站连接或将localhost配置为数据库主机通常没有用。

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

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

在 IP 地址方面localhost始终为 127.0.0.1,并且该 IP 地址很特殊,并且始终为localhost ,其行为方式与上述相同。


如果要连接到容器...

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

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

...来自同一物理主机上的终端窗口或浏览器,而不是在容器中,在这种情况下,仅在这种情况下, localhost将始终如一地工作。


除了:

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

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

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

当然,如果您在容器中运行命令,它将成为您的容器。

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

如果您在容器内运行此命令,它将尝试连接在容器内运行的 mysql。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM