首先我运行mysql映像:
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 127.0.0.1:3308:3306 mysql
然后我使用容器重击:
docker exec -it my_container_name bash
在Bash中,我可以通过命令成功连接到MySQL服务器:
mysql -uroot -ppassword
但是当我尝试从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外部?
错误出在原始docker run
命令中的端口映射中,您只需要提供端口,而不是IP地址:
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3308:3306 mysql
首先,检查netstat -an
以确保端口在Windows中打开。如果是的话,还请检查Windows防火墙以确保没有任何东西阻止该端口的连接。
我的大部分Docker经验都在CoreOS中,所以我不确定Windows如何处理将流量路由到容器中。在CoreOS中,它使用proxy。如果Windows中有代理,请确保没有任何干扰。
更改运行图像的端口有效。我检查了此端口是否被其他人使用,但未使用。所以我只是拼命地在另一个端口“ 3309”中运行一个新容器。而且效果很好!