无法连接转发到 3306 的 docker mysql
Can not connect docker mysql that's forwarding to 3306
当我尝试连接到 docker MySQL 运行 并转发到我的本地 TCP:3306 时,我得到以下答案
mysql -u root -pPASSWORD
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
但是当我这样做时 mysql -u root -pPASSWORD -h127.0.0.1
它连接得很好。
有什么线索吗?
[更新]
考虑到评论和这个 我创建 ~/.my.cnf
具有此内容
[Mysql]
user=root
password=yourpass
host=127.0.0.1
port=3306
进行这些更改后,我可以将本地主机连接到 127.0.0.1 地址。
如果您没有使用 -h
(或 .my.cnf 中的 host
指令)指定主机,则 MySQL 默认连接到本地主机。与本地主机的连接使用 UNIX 域套接字接口,而不是 TCP/IP。所以它没有连接到 TCP/IP 端口,因此不会转发到您的 docker 容器。
localhost 和 127.0.0.1 之间的区别是 MySQL 的历史怪事。通常假定 localhost 和 127.0.0.1 是等价的。但是 MySQL 将主机名“localhost”视为特殊主机名,使用它来调用 UNIX 域套接字接口。这是 a bit faster than using TCP/IP,但当然只有在本地计算机上连接时才有效。
当我尝试连接到 docker MySQL 运行 并转发到我的本地 TCP:3306 时,我得到以下答案
mysql -u root -pPASSWORD
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
但是当我这样做时 mysql -u root -pPASSWORD -h127.0.0.1
它连接得很好。
有什么线索吗?
[更新]
考虑到评论和这个 ~/.my.cnf
具有此内容
[Mysql]
user=root
password=yourpass
host=127.0.0.1
port=3306
进行这些更改后,我可以将本地主机连接到 127.0.0.1 地址。
如果您没有使用 -h
(或 .my.cnf 中的 host
指令)指定主机,则 MySQL 默认连接到本地主机。与本地主机的连接使用 UNIX 域套接字接口,而不是 TCP/IP。所以它没有连接到 TCP/IP 端口,因此不会转发到您的 docker 容器。
localhost 和 127.0.0.1 之间的区别是 MySQL 的历史怪事。通常假定 localhost 和 127.0.0.1 是等价的。但是 MySQL 将主机名“localhost”视为特殊主机名,使用它来调用 UNIX 域套接字接口。这是 a bit faster than using TCP/IP,但当然只有在本地计算机上连接时才有效。