如图
这里设置的应该是,将容器的3306映射到主机的3366上,但是我只能通过192.168.99.100:3366来连接容器内的mysql服务
我宿主机的真实ip是10.0.0.2
但是我通过10.0.0.2:3366却连接不上,求大神指点一下
直接回答你的问题:之所以你必须通过192.168.99.100:3366来访问容器而不是宿主机的IP:10.0.0.2,就在于:你用了 Toolbox, 而 Toolbox 默认用到了 Virtualbox 虚拟机,于是多了一层。
192.168.99.100:3366
10.0.0.2
Toolbox
Virtualbox
画图说明之:
@有明 说的也是对的,建议你使用 Docker for Mac,Toolbox会被渐渐舍弃吧。
关掉防火墙试试吧
你试一下可否在容器里连到,mysql配置默认只能127.0.0.1的ip可以连接的。
提供一点思路:
首先通过3306端口来测试mysql service各个IP上的服务情况,如:
telnet 10.0.0.2 3306 telnet 192.168.99.100 3306
如果telnet发现端口是通畅的,然后再检查mysql的设置问题,即是否允许其他IP地址的mysql客户端访问
要在防火墙添加docker容器的网段 请允许访问host
iptables-F
为什么现在用Toolbox版的Docker,直接使用Docker for Mac最新版你的问题就不是问题了……
Docker其实是运行在Mac系统中的Linux虚拟机中的,Toolbox版的Docker使用的是VirtualBox作为虚拟机,因为属于第三方应用,且应用提供的接口也有限,所以虽然Docker能够映射端口到虚拟机上,但是不能把虚拟机的端口在映射到主机上。要实现这个映射,还需要手动去VirtualBox里做端口映射。
而新版的Docker for Mac使用的是xhyve作为虚拟机提供者,由于得到了Mac系统原生支持,它所提供的接口更丰富,Docker for Mac也能自动完成虚拟机到主机间的端口映射。所以在新版的Docker for Mac中,就无须再人工做虚拟机到主机端口映射的操作,可以直接使用本地127.0.0.1的端口访问到与之绑定的容器里。
直接回答你的问题:
之所以你必须通过
192.168.99.100:3366
来访问容器而不是宿主机的IP:10.0.0.2
,就在于:你用了Toolbox
, 而Toolbox
默认用到了Virtualbox
虚拟机,于是多了一层。画图说明之:
@有明 说的也是对的,建议你使用 Docker for Mac,
Toolbox
会被渐渐舍弃吧。关掉防火墙试试吧
你试一下可否在容器里连到,mysql配置默认只能127.0.0.1的ip可以连接的。
提供一点思路:
首先通过3306端口来测试mysql service各个IP上的服务情况,如:
如果telnet发现端口是通畅的,然后再检查mysql的设置问题,即是否允许其他IP地址的mysql客户端访问
要在防火墙添加docker容器的网段 请允许访问host
iptables-F
为什么现在用Toolbox版的Docker,直接使用Docker for Mac最新版你的问题就不是问题了……
Docker其实是运行在Mac系统中的Linux虚拟机中的,Toolbox版的Docker使用的是VirtualBox作为虚拟机,因为属于第三方应用,且应用提供的接口也有限,所以虽然Docker能够映射端口到虚拟机上,但是不能把虚拟机的端口在映射到主机上。要实现这个映射,还需要手动去VirtualBox里做端口映射。
而新版的Docker for Mac使用的是xhyve作为虚拟机提供者,由于得到了Mac系统原生支持,它所提供的接口更丰富,Docker for Mac也能自动完成虚拟机到主机间的端口映射。所以在新版的Docker for Mac中,就无须再人工做虚拟机到主机端口映射的操作,可以直接使用本地127.0.0.1的端口访问到与之绑定的容器里。