从本地主机连接到 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 实例 运行?
澄清一下:
- 我有一台装有 Docker 的 macbook
- 我有一个 docker 容器 mysql
- 我想从我的 macbook 上的终端连接到上述容器上的 mysql 实例 运行
- 我不想使用
docker
命令来实现这一点。相反,我想直接从终端使用 mysql
客户端(不通过 docker 容器隧道)。
我本地没有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.1
或 localhost
将指向到您的 docker 主机。
docker run --network="host" -p 8080:8080 <your-docker-Image>
我有一张 docker mysql 图片 运行,下面是 docker-compose.yml 文件的样子:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: yes
ports:
- "3306:3306"
这很好用。
我的问题是:如何从主机(我的 macbook)上的命令行 mysql 客户端连接到该容器上的 MySQL 实例 运行?
澄清一下:
- 我有一台装有 Docker 的 macbook
- 我有一个 docker 容器 mysql
- 我想从我的 macbook 上的终端连接到上述容器上的 mysql 实例 运行
- 我不想使用
docker
命令来实现这一点。相反,我想直接从终端使用mysql
客户端(不通过 docker 容器隧道)。
我本地没有MySQL运行,所以3306端口应该是开放的,可以使用了。
我用来启动容器的命令是:docker-compose run
通过 {host ip}:3306 连接到 MySQL,因为您已经将内部端口作为 3306 暴露给您的主机。如果您需要访问 MySQL CLI 工具,您将需要go docker exec -it mycontainer bash
如果您没有在主机 o/s.
使用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.1
或 localhost
将指向到您的 docker 主机。
docker run --network="host" -p 8080:8080 <your-docker-Image>