从本地连接到Docker MySQL容器?

我有一个docker运行的mysql图像,以下是docker-compose.yml文件的样子:

db: image: mysql environment: MYSQL_ROOT_PASSWORD: "" MYSQL_ALLOW_EMPTY_PASSWORD: yes ports: - "3306:3306" 

这工作正常。

我的问题是:我怎么能连接到MySQL的实例运行在该容器从命令行mysql客户端在我的主机(我的macbook)?

澄清:

  • 我有一个安装了Docker的MacBook
  • 我有一个docker容器与MySQL
  • 我想连接到上述容器从我的MacBookterminal上运行的MySQL实例
  • 我不想使用docker命令来实现这一点。 相反,我想直接从terminal使用mysql客户端(无需通过docker容器进行隧道传输)。

我没有在本地运行MySQL,所以端口3306应该是开放的并且可以使用。

我用来启动容器的命令是: docker-compose run

使用docker-compose up

由于您在docker主机上发布了3306端口,因此您将连接到127.0.0.1:3306

使用docker-compose run

在这种情况下, docker-compose.yml文件的端口映射部分将被忽略。 要考虑端口映射部分,您必须添加--service-ports选项:

 docker-compose run --service-ports db 

附加说明

请注意,默认情况下,当你告诉mysql连接到localhost时,mysql客户端会尝试使用unix套接字进行连接。 所以请使用127.0.0.1而不是localhost

  $ mysql -h 127.0.0.1 -P 3306 -u root 

欢迎来到MySQL监视器。 命令以; 或\ g。 您的MySQL连接ID是1服务器版本:5.6.26 MySQL社区服务器(GPL)

版权所有(c)2000,2015,Oracle和/或其附属公司。 版权所有。

Oracle是Oracle Corporation和/或其附属公司的注册商标。 其他名称可能是其各自所有者的商标。

input'help' 或'\ h'寻求帮助。 input'\ c'清除当前的input语句。

MySQL的>

 $ mysql -h localhost -P 3306 -u root 

错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)

我知道了!! 答案是在运行--service-ports docker-compose时使用--service-ports选项:

docker-compose run --service-ports db (原来的docker-compose.yml文件工作正常)

感谢所有的帮助!

你的XML文件看起来不错。

您可以直接连接docker集装箱,因为它已经与本地端口3306映射。只需转到terminal并运行

 mysql -h 127.0.0.1 -u root -p 

注意:您必须有权访问mysql命令行。 如果mysql命令显示错误,请检查“/ usr / local / mysql / bin”,否则不能连接到mysql服务器。 换句话说,你的机器上必须有mysql客户端。

如果您的Docker MySQL主机运行正常,您可以从本地机器连接到它,但是您应该指定如下所示的主机,端口和协议:

 mysql -h localhost -P 3306 --protocol=tcp -u root 

因为你在Docker容器中运行MySQL,所以socket不可用,你需要通过TCP连接。 在mysql命令中设置“–protocol”会改变它。

通过{host ip}:3306连接到MySQL,因为你已经将内部端口暴露给你的主机为3306.如果你需要访问MySQL CLI工具,你将需要去docker exec -it mycontainer bash这将把你放在容器来访问MySQL安装的工具,如果你没有在主机上本地安装它们的话。