从本地连接到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安装的工具,如果你没有在主机上本地安装它们的话。