从本地主机连接到 Docker MySQL 容器?

Connect to Docker MySQL container from localhost?

我有一张 docker mysql 图片 运行,下面是 docker-compose.yml 文件的样子:

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

这很好用。

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

澄清一下:

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

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

通过 {host ip}:3306 连接到 MySQL,因为您已经将内部端口作为 3306 暴露给您的主机。如果您需要访问 MySQL CLI 工具,您将需要go docker exec -it mycontainer bash 如果您没有在主机 o/s.

上本地安装这些工具,这将使您进入容器以访问使用 MySQL 安装的工具

使用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 时,它会尝试使用 unix 套接字进行连接。所以请使用 127.0.0.1 而不是 localhost:

 $ mysql -h 127.0.0.1 -P 3306 -u root

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

$ mysql -h localhost -P 3306 -u root

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

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

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

感谢大家的帮助!

你的 yml 文件看起来不错。

您可以直接连接 docker 容器,因为它已经映射到本地端口 3306。 只需转到终端和 运行

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

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

这对我有用。

/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p

在 Docker 图像中登录 MySQL 的简单方法是:

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

对于mySQL的root帐户默认密码没有设置,它的空白,只要按enter/return键,除非你已经更改了root密码。

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

干杯!

您可以在 docker 运行 命令中使用 --network="host",然后 docker 容器中的 127.0.0.1localhost 将指向到您的 docker 主机。

docker run --network="host" -p 8080:8080 <your-docker-Image>