使用的镜像是 mariadb:latest
$ docker pull mariadb
直接进行端口映射(忽略我又给了一个mariadb的名字):
$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mariadb mariadb:latest
映射成功之后:
$ netstat -tunlp |grep 3306
信息如下:
连接数据库:
$ 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