Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连接到本地机器上容器中运行的MySQL实例?_Mysql_Database_Macos_Docker - Fatal编程技术网

如何连接到本地机器上容器中运行的MySQL实例?

如何连接到本地机器上容器中运行的MySQL实例?,mysql,database,macos,docker,Mysql,Database,Macos,Docker,我已经使用找到的说明在docker容器中设置了一个MySQL实例。我可以通过猛击容器,然后运行MySQL客户端来连接实例,如下所示: docker exec -it mySQLContainer bash 然后 mysql -uroot -p 但是我看不到如何从主机连接到实例。到目前为止,我已经尝试了以下方法: mysql localhost mysql -h localhost -P 3306 返回 错误2002(HY000):无法通过套接字连接到本地MySQL服务器 “/tmp/mys

我已经使用找到的说明在docker容器中设置了一个MySQL实例。我可以通过猛击容器,然后运行MySQL客户端来连接实例,如下所示:

docker exec -it mySQLContainer bash
然后

mysql -uroot -p
但是我看不到如何从主机连接到实例。到目前为止,我已经尝试了以下方法:

mysql localhost
mysql -h localhost -P 3306
返回

错误2002(HY000):无法通过套接字连接到本地MySQL服务器 “/tmp/mysql.sock”(2)

返回

错误2003(HY000):无法连接到“localhost”(61)上的MySQL服务器

我发现了一些关于这个问题的其他问题,但解决方案似乎不起作用。有人能看出我做错了什么,或者我需要做些什么来连接吗

注意: 这是我为MySQL开发的容器-如果需要包含任何其他信息,请告诉我:

docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
9f1fc20d66c0        mysql:latest        "docker-entrypoint.s…"   2 days ago          Up 2 days           3306/tcp, 33060/tcp   plugins
更新: 以下是我的容器日志中的最后两行-不确定是否相关:

2020-02-07T20:02:22.887174Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.19'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
2020-02-07T20:02:22.982168Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060

当我这样做时,我启动一个外部端口映射到3306的容器

例如,下面是我如何启动一个容器来运行Percona Server 8.0:

docker run -d --name ps8 -e MYSQL_ROOT_PASSWORD=XXX -p 6603:3306 percona/percona-server:8.0
然后我可以连接到外部端口,Docker会将其发送到容器内的3306:

mysql -h 127.0.0.1 -P 6603 -uroot -pXXX
我使用端口6603,因为我的笔记本电脑上也有一个使用3306的MySQL实例。但是如果您想使用默认端口3306,并且它不冲突,那么也应该可以


请回复您的评论:

除非指定要从容器外部使用的端口,否则这些端口不会公开。默认情况下,无法联系docker容器内的端口

这就是为什么
-p
选项很重要的原因。它告诉docker您希望它允许来自容器外部的连接,并告诉docker应该侦听哪个端口,以代理容器内部的mysqld进程

当我查看我正在运行的容器时,我看到有一个6603->3306的映射

$ docker ps

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                               NAMES
b1c949e0a8ae        percona/percona-server:8.0   "/docker-entrypoint.…"   44 seconds ago      Up 43 seconds       33060/tcp, 0.0.0.0:6603->3306/tcp   ps8

MySQL 8.0还侦听33060,这是XDev协议端口。我目前没有为此端口配置映射,但我可以。

您是否检查了链接中提到的日志?您的意思是运行类似于
docker logs mySQLContianer
?如果是,那么我有-我应该特别注意那些日志中的任何内容吗?Hrrm好的,只要我知道MySQL容器实例运行的端口,我就应该能够使用您使用的相同方法连接到它,对吗?我已经用一些日志行更新了我的原始帖子,这些日志行显示了所有正在运行的端口。基于此,我尝试过的命令中有一个不应该起作用吗?
$ docker ps

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                               NAMES
b1c949e0a8ae        percona/percona-server:8.0   "/docker-entrypoint.…"   44 seconds ago      Up 43 seconds       33060/tcp, 0.0.0.0:6603->3306/tcp   ps8