2016-11-01 99 views
1

首先我運行mysql圖像:無法連接到MySQL服務器內的碼頭工人

docker run -e MYSQL_ROOT_PASSWORD=password -d -p 127.0.0.1:3308:3306 mysql 

然後我用容器的bash(其中big_golick是一個隨機命名的碼頭工人本身分配給容器):

docker exec -it big_golick bash 

在Bash中,我可以通過命令成功連接到MySQL服務器:

mysql -uroot -ppassword 

但是當我嘗試c ONNECT從Windows CMD MySQL的容器:

mysql -uroot -ppassword -h127.0.0.1 -P3308 

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (10061) 

如果我連接到192.168.99.100而不是(這個IP是docker-machine ip返回),那麼結果是一樣的。

現在的問題是:如何正確地將Docker內部的MySQL端口暴露給外部Windows?

+0

如果您使用泊塢窗機連接到MySQL,你必須使用泊塢窗機虛擬機的IP地址,而不是127.0.0.1的:'MySQL的-uroot -ppassword -h192.168.99.100 -P3308'。 192.168.99.100通常是Docker Machine VM的IP。 – nwinkler

+0

nwinkler確實,192.168.99.100是返回docker-machine ip命令。但它取代ip並沒有幫助 – Yurii

+0

你可以運行docker ps -a來檢查端口映射是否設置正確嗎? – nwinkler

回答

1

的錯誤是在原docker run命令你的端口映射,你只需要提供的端口,而不是IP地址:

docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3308:3306 mysql 

您可以運行docker ps -a檢查在運行端口映射容器。

您現在應該可以使用

mysql -uroot -ppassword -h192.168.99.100 -P3308 
0

首先,檢查netstat -an以確保端口在Windows中打開。如果是,請檢查Windows防火牆以確保沒有阻塞連接到端口。

我的Docker大部分經驗都在CoreOS中,所以我不太確定Windows如何處理到容器中的路由流量。在CoreOS中,它使用proxy。如果Windows中有代理,請確保沒有任何干擾。

+0

它沒有打開,它甚至沒有在netstat -an輸出中提及 – Yurii