如何连接到本地机器上容器中运行的MySQL实例?
我已经使用找到的说明在docker容器中设置了一个MySQL实例。我可以通过猛击容器,然后运行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 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