Mac OS上使用Docker的localhost与0.0.0.0的对比 [英] Localhost vs 0.0.0.0 with Docker on Mac OS

查看:50
本文介绍了Mac OS上使用Docker的localhost与0.0.0.0的对比的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读文档here,我发现自己有点困惑,因为运行
docker run --name some-mysql -p 3306:3306 -d mysql

docker run --name some-mysql -p 127.0.0.1:3306:3306 -d mysql

mysql --host localhost --port 3306 -u root显示以下错误:

错误2002(HY000):无法通过套接字‘/tmp/mysql.sock’(2)连接到本地MySQL服务器。

但运行mysql -u root -p --host 0.0.0.0起作用。

有人有解释吗?

推荐答案

通过坞站端口转发,您需要跟踪两个网络命名空间。第一个是在你的容器里。如果您监听容器内部的localhost,容器外部的任何东西都无法连接到您的应用程序。这包括阻止来自坞站主机的端口转发和容器到容器网络。因此,除非您的容器在自言自语,否则您将始终侦听在容器内运行的应用程序的0.0.0.0。

第二个网络名称空间位于您的坞站主机上。当您使用docker run -p 127.0.0.1:1234:5678 ...转发端口时,该端口在坞站主机接口127.0.0.1端口1234上配置侦听器,并将其转发到容器命名空间端口5678(该容器必须在0.0.0.0上侦听)。如果您不使用IP,docker将在主机上的所有接口上发布端口。

因此,当您将MySQL配置为侦听127.0.0.1时,无法从容器的网络名称空间外部访问它。如果需要阻止坞站主机以外的其他人访问该端口,请在docker runCLI上发布端口时配置该限制。

这篇关于Mac OS上使用Docker的localhost与0.0.0.0的对比的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆