Docker 容器内部的 localhost 是什么意思?
- 2024-10-18 09:00:00
- admin 原创
- 72
问题描述:
比如说,如果我在 docker 容器内使用这个命令。
/opt/lampp/bin/mysql -h localhost -u root -pThePassword
这里的 localhost 指的是什么?主机的 IP 还是 docker 容器自己的 IP?
解决方案 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 服务通过容器或其在 Docker Compose YAML 文件中的名称以及容器内的端口号来引用它们。即使目标具有带有选项或 Docker Compose设置的--name
已发布端口,也请使用第二个(容器内部)端口号。docker run -p
`ports:`
...从 Docker 空间外部,确保您使用docker run -p
或 Docker Composeports:
选项启动容器,并使用该选项的第一个端口号连接到主机的IP 地址或 DNS 名称。
...从同一物理主机上的终端窗口或浏览器(而不是在容器中),在这种情况下,并且仅在这种情况下,localhost
将始终如一地工作。
除了:
如果您使用 启动了一个容器--net host
,localhost
则指的是物理主机,并且您处于“同一物理主机上的终端窗口”场景。
如果您不遗余力地在同一个容器中拥有多个服务器,那么您可以使用localhost
它们之间进行通信。
如果您在 Kubernetes 中运行,并且同一个 pod 中有多个容器,则可以使用localhost
在它们之间进行通信。在 pod 之间,您应该在每个 pod/部署前面设置一个服务,并使用以下形式的 DNS 名称service-name.namespace-name.svc.cluster.local
。
解决方案 2:
毫无疑问,如果您在容器中运行命令,它将是您的容器。
/opt/lampp/bin/mysql -h localhost -u root -pThePassword
如果您在容器内运行此命令,那么它将尝试连接在容器内运行的 mysql。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件