Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux localhost在Docker容器中的含义是什么?_Linux_Docker - Fatal编程技术网

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

Linux localhost在Docker容器中的含义是什么?,linux,docker,Linux,Docker,比方说,如果我在docker容器中使用此命令 /opt/lampp/bin/mysql -h localhost -u root -pThePassword /opt/lampp/bin/mysql -h localhost -u root -pThePassword 这里的localhost指的是什么?主机的IP还是docker容器自己的IP 如果您在容器中运行命令,它肯定是您的容器 /opt/lampp/bin/mysql -h localhost -u root -pThePasswo

比方说,如果我在docker容器中使用此命令

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

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

如果您在容器中运行命令,它肯定是您的容器

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

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

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

/opt/lampp/bin/mysql -h localhost -u root -pThePassword
/opt/lampp/bin/mysql -h localhost -u root -pThePassword
从主机系统上的shell
localhost
可以引用Docker外部系统上运行的守护进程,或者引用使用
Docker run-p
选项发布的端口

来自不同的系统
本地主机
指从中调用它的系统

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


如果要连接到容器…

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

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

…从同一物理主机上的终端窗口或浏览器,而不是容器中,
localhost
将持续工作


除外:

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

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


如果您在Kubernetes中运行,并且在同一个pod中有多个容器,那么可以使用
localhost
在它们之间进行通信。在pod之间,您应该在每个pod/部署之前设置一个服务,并使用DNS名称,其形式为
服务名称.命名空间名称.svc.cluster.local

依赖(ish),但99%的时间=容器。您好,David,感谢您提供的信息。看到容器中的
localhost
始终引用当前容器,您将如何连接到主机上运行的数据库,而不是容器中运行的数据库?请参阅。