如圖
這裡設定的應該是,將容器的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的連接埠存取到與之綁定的容器裡。