mysql - 本地主机连接 MySQL Docker 困惑

标签 mysql docker

我使用以下命令创建了一个test_mysql:

docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql

我使用docker检查test_mysql获得了IP地址。 IP 为 172.17.0.2

奇怪的是,当我尝试使用本地连接到 mysql 服务器时

mysql -uroot -p123 -h 172.17.0.2 -P 3306

出现错误:

ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.2' (51)

但是,如果我使用本地主机 IP 地址,它确实有效:

mysql -uroot -p123 -h 127.0.0.1 -P 3306

我的问题是为什么我无法使用docker检查结果连接到容器,而localhost IP工作?

最佳答案

1) 当本地主机 IP 有效时? 让我们再次看看启动容器的命令:

docker run -d -p 3306:3306 --name=test_mysql --env="MYSQL_ROOT_PASSWORD=123" mysql

-p 3306:3306 会将主机的 3306 端口“绑定(bind)”到容器的 3306 端口。结果,我们可以看到,如果有任何连接到达端口 3306,它们将被转发到容器的端口。 因此,您在本地 IP 上的连接将正常工作:

mysql -uroot -p123 -h 127.0.0.1 -P 3306

查看更多详细信息Docker page

2)为什么我无法使用docker检查结果连接到容器

您的容器似乎已连接到默认桥接网络(在您的情况下,docker0 可能有 IP:172.17.0.1 ),该网络通常是在您安装 Docker 时默认创建的。 您可以在Docker network page中找到更多详细信息因此,在您的容器内,您可能会“看到”网桥(您可以尝试使用 ping 命令”,但从您的本地主机,它可能不知道如何查找/解析 172.17.0.2,并且您会收到该错误。

关于mysql - 本地主机连接 MySQL Docker 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319631/

相关文章:

mysql - 使用 between、date_add 和 getdate 进行年龄搜索的语法中的 sql 错误

linux - 如何将 docker 中的/proc 文件系统重新挂载为 r/w 系统?

Windows 10 Docker 主机 - 从 Linux 容器显示 GUI 应用程序

mysql - 使用别名时出现重复字段

MySQL 如果存在则选择,但如果不存在则显示 no 值

php - Web 应用程序中多个用户的访问控制

mysql - MySQL 中的自动列值更新

cassandra - Docker - Cassandra 与身份验证

bash - 如何评估docker-compose.yml文件中的动态变量?

docker - 如何将文件夹从dockerfile的父文件夹复制到workdir