linux - localhost在Docker容器中的含义是什么?




(2)

当然,如果你在容器中运行命令,它将是你的容器。

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

如果你在容器内运行这个命令,那么它将尝试连接在容器内运行的mysql。

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

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

这里的localhost会引用什么? 主机的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服务通过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名称。







docker