从localhost连接到Docker MySQL容器?

Cal*_*leb 52 mysql macos docker docker-compose

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

db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: ""
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
  ports:
    - "3306:3306"
Run Code Online (Sandbox Code Playgroud)

这很好用.

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

澄清:

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

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

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

Tho*_*eil 68

运用 docker-compose up

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

运用 docker-compose run

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

docker-compose run --service-ports db
Run Code Online (Sandbox Code Playgroud)

附加说明

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

 $ mysql -h 127.0.0.1 -P 3306 -u root
Run Code Online (Sandbox Code Playgroud)

欢迎使用MySQL监视器.命令以;结尾; 或\ g.您的MySQL连接ID是1服务器版本:5.6.26 MySQL社区服务器(GPL)

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

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

输入'help;' 或'\ h'寻求帮助.输入'\ c'清除当前输入语句.

MySQL的>

$ mysql -h localhost -P 3306 -u root
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你的提示。我尝试使用`127.0.0.1`(和`192.168.59.103`),都没有工作:( (5认同)

cro*_*dle 11

在 Docker 镜像中登录 MySQL 的一种简单方法是:

sudo docker exec -it <CONTAINER_ID> mysql -u root -p

root默认情况下,mySQL 的帐户没有设置密码,它是空白的,只需按回车/返回键,除非您更改了 root 密码。

成功执行后,上面的命令会给你 mysql 提示。

干杯!

  • 最初的问题非常明确地指出他们不想这样做。 (4认同)

Cal*_*leb 10

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

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

感谢大家的帮助!

  • 这有效,但现在容器是不可杀死的?你怎么阻止它? (2认同)

man*_*ekq 7

如果你的 Docker MySQL 主机运行正常,你可以从本地机器连接到它,但你应该像这样指定主机、端口和协议:

mysql -h localhost -P 3306 --protocol=tcp -u root
Run Code Online (Sandbox Code Playgroud)

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