无法连接到 Docker 内的 MySQL 服务器
Cannot connect to MySQL server inside Docker
首先我运行mysql图片:
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 127.0.0.1:3308:3306 mysql
然后我用容器bash:
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 外部?
首先,检查 netstat -an
以确保端口在 Windows 中打开。如果是,还要检查 Windows 防火墙以确保没有任何东西阻止到端口的连接。
我的大部分 Docker 经验都在 CoreOS 中,所以我不确定 Windows 如何处理将流量路由到容器中。在 CoreOS 中,它使用 proxy。如果 Windows 中有代理,请确保没有任何干扰。
错误出在你原来的docker run
命令中的端口映射,你只需要提供端口,而不是IP地址:
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3308:3306 mysql
您可以 运行 docker ps -a
检查 运行ning 容器中的端口映射。
您现在应该可以使用
连接到 MySQL
mysql -uroot -ppassword -h192.168.99.100 -P3308
更改我用来 运行 镜像的端口有效。
我检查了这个端口是否被其他东西使用,但没有使用。所以我只是 - 绝望地 - 运行 在不同端口“3309”中的一个新容器。而且效果很好!
确保您已使用-P 输入端口。
首先我运行mysql图片:
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 127.0.0.1:3308:3306 mysql
然后我用容器bash:
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 外部?
首先,检查 netstat -an
以确保端口在 Windows 中打开。如果是,还要检查 Windows 防火墙以确保没有任何东西阻止到端口的连接。
我的大部分 Docker 经验都在 CoreOS 中,所以我不确定 Windows 如何处理将流量路由到容器中。在 CoreOS 中,它使用 proxy。如果 Windows 中有代理,请确保没有任何干扰。
错误出在你原来的docker run
命令中的端口映射,你只需要提供端口,而不是IP地址:
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3308:3306 mysql
您可以 运行 docker ps -a
检查 运行ning 容器中的端口映射。
您现在应该可以使用
连接到 MySQLmysql -uroot -ppassword -h192.168.99.100 -P3308
更改我用来 运行 镜像的端口有效。 我检查了这个端口是否被其他东西使用,但没有使用。所以我只是 - 绝望地 - 运行 在不同端口“3309”中的一个新容器。而且效果很好!
确保您已使用-P 输入端口。