我运行了一个docker mysql映像,以下是docker-compose.yml文件的样子:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: yes
ports:
- "3306:3306"
这很好用。
我的问题是:如何从主机(我的macbook)上的命令行mysql客户端连接到该容器上运行的MySQL实例?
澄清:
docker
命令来实现这一目标。相反,我想直接从终端使用mysql
客户端(不通过docker容器进行隧道传输)。我没有在本地运行MySQL,因此端口3306应该是开放的并且可以使用。
我用来启动容器的命令是:docker-compose run
答案 0 :(得分:60)
docker-compose up
由于您在泊坞主机上发布了端口3306
,因此您将从该主机本身连接到127.0.0.1:3306
。
docker-compose run
在这种情况下,docker-compose.yml
文件的端口映射部分将被忽略。要考虑端口映射部分,您必须添加--service-ports
选项:
docker-compose run --service-ports db
请注意,默认情况下,当您告诉它连接到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和/或其注册商标 分支机构。其他名称可能是其各自的商标 所有者。
输入'帮助;'或者' \ h'求助。输入' \ c'清除当前的输入声明。
的MySQL>
$ mysql -h localhost -P 3306 -u root
ERROR 2002(HY000):无法通过socket' /var/run/mysqld/mysqld.sock'连接到本地MySQL服务器; (2)
答案 1 :(得分:10)
我懂了!!答案是在运行--service-ports
时使用docker-compose
选项:
docker-compose run --service-ports db
(原始的docker-compose.yml文件正常工作)
感谢大家的帮助!
答案 2 :(得分:2)
您可以在 docker run 命令中使用 --network="host"
,然后您的 docker 容器中的 127.0.0.1
或 localhost
将指向您的 docker 主机。
docker run --network="host" -p 8080:8080 <your-docker-Image>
答案 3 :(得分:0)
通过{host ip}:3306连接到MySQL,因为您已将内部端口暴露给主机3306.如果您需要访问MySQL CLI工具,则需要docker exec -it mycontainer bash
这将如果您没有在主机o / s上本地安装它们,请将您置于容器内以访问与MySQL一起安装的工具。
答案 4 :(得分:0)
您的yml文件看起来不错。
您可以直接连接docker container,因为它已经映射到本地端口3306。 只需转到终端并运行
mysql -h 127.0.0.1 -u root -p
注意:您必须有权访问mysql命令行。如果mysql命令显示错误,请检查&#39; / usr / local / mysql / bin&#39;另外,你无法连接到mysql服务器。换句话说,你的机器上必须有mysql客户端。
答案 5 :(得分:0)
如果您的Docker MySQL主机运行正常,您可以从本地计算机连接到它,但您应该指定主机,端口和协议,如下所示:
mysql -h localhost -P 3306 --protocol=tcp -u root
因为您在Docker容器中运行MySQL,所以套接字不可用,您需要通过TCP连接。在mysql命令中设置“--protocol”将改变它。
答案 6 :(得分:0)
这对我有用。
/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
答案 7 :(得分:0)
在Docker映像中登录MySQL的简单方法是:
sudo docker exec -it <IMAGE_ID> mysql -u root -p
未设置root
的默认密码,其空白,除非您更改了root密码,否则只需按Enter /返回键即可。
成功执行后,上述命令会提示您mysql。
干杯!