【Docker】使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别?

使用的镜像是 mariadb:latest

$ docker pull mariadb

直接进行端口映射(忽略我又给了一个mariadb的名字):

$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mariadb mariadb:latest

映射成功之后:

【Docker】使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别?

$ netstat -tunlp |grep 3306

信息如下:

【Docker】使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别?

连接数据库:

$ mysql -uroot -proot

报错:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我知道这个错误怎么搞或者什么原因,但是如果我加了 -hIP 就没问题:

$ mysql -h127.0.0.1 -uroot -proot

$ mysql -h192.168.1.130 -uroot -proot

上面两个都没问题,但是如果 -hlocalhost 就有问题(同样上面的错误):

$ mysql -hlocalhost -uroot -proot

ping localhost 是没问题的

这个问题是我 linux 的问题还是 docker 容器方面的问题还是什么问题?
为什么 -h127.0.0.1 能工作而 -hlocalhost 却不能工作,这两者有什么区别?

回答

区别是mysql在使用-hlocalhost选择使用的连接方式为unix-socket,而你没有在mysql的配置文件中启用:socket=/var/run/mysqld/mysqld.sock,导致这个文件不存在而使连接失败;而-hIP的形式使用的是tcp-socket

-h IP:是通过TCP/IP连接方式连接
-h localhost: 是通过socket连接方式连接

可以通过修改配置文件

protocol=tcp  # 强制使用TCP/IP 连接

skip-networking #强制使用socket来连接。

区别是localhost需要映射到ip,配置在/etc/hosts文件里面
至于localhost不能工作,应该就是默认没有配置在hosts文件里

localhost、127.0.0.1 和 本机IP 三者的区别? mysql -h localhost -u root -p root此时你尝试连接的是宿主机的mysql了

以上是 【Docker】使用docker的话,mysql 命令的 -h127.0.0.1和-hlocalhost有什么区别? 的全部内容, 来源链接: utcz.com/a/76047.html

回到顶部