Docker容器内localhost的含义:mysql命令中localhost指向主机还是容器?
Docker容器内
localhost指向问题解答 咱们先把问题明确下:你是在Docker容器里执行这条命令:
/opt/lampp/bin/mysql -h localhost -u root -pThePassword
想搞清楚这里的localhost到底是指宿主机的IP,还是容器自己的IP对吧?
直接给结论:这里的localhost指代的是Docker容器自身的IP,也就是容器自己的环回地址127.0.0.1,和宿主机的localhost完全是两回事。
为啥会这样?因为Docker默认给每个容器分配了独立的网络命名空间,每个容器都有自己独立的网络栈——就像一台单独的小虚拟机,它的localhost只指向自己内部的网络接口。如果你的MySQL服务是装在宿主机上的,那你用localhost在容器里连接肯定连不上,因为容器里的localhost根本找不到宿主机上的服务。
要是你想在容器里访问宿主机的服务,有几种实用办法:
- 用宿主机在容器所在网络的实际IP(比如宿主机的内网IP,像192.168.x.x这类)
- 启动容器时加上
--network host参数,让容器共享宿主机的网络栈,这时候容器里的localhost就会指向宿主机,但这种方式会丢掉容器网络隔离的优势,一般不推荐随便用
内容的提问来源于stack exchange,提问作者AlexScalar
相关产品推荐
相关产品推荐

