如何从主机连接到运行在Docker上的MySQL

21

我已经在这个主题上进行了谷歌搜索,并找到了几个线程。基于这些线程,我已经按照以下步骤操作。但是我遇到了一个问题。

基本上,我想为mysql创建一个docker镜像,然后从我的主机(Mac OS X)连接它。

根据这篇帖子,我必须与主机共享mysql unix套接字。为此,我已经执行了以下步骤。

1. Start docker quick terminal
2. docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest
3. docker exec -it mysql bash
4. mysql -uroot -p
5. create database MyDB;
6. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
7. exit;
8. mkdir /Users/abhi/host
9. docker run -it -v /host:/shared mysql/mysql-server:latest

现在我遇到了错误

MacBook-Pro:~$ docker run -it -v /Users/abhi/host:/shared mysql/mysql-server
error: database is uninitialized and password option is not specified
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

但是您看到我已经提供了密码并初始化了我的数据库。

我想要的只是从我的主机上,能够连接到在Docker内运行的MySQL数据库。

编辑:----- 已经解决的方案 -----

感谢RICO。最终对我起作用的步骤是

1. Start docker quick terminal
2. docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest
3. docker exec -it mysql bash
4. mysql -uroot -p
5. create database MyDB;

  or:
  CREATE USER 'root'@'%' IDENTIFIED BY 'root';
  GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

6. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
7. exit;
8. docker-machine env default

使用第8步获取的IP地址,端口为3306,用户名为root,密码为password,数据库为MyDB。

连接成功!

2个回答

23

所以基本上你需要将mysql端口暴露给你的主机:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest

然后您可以使用mysql命令行从您的主机访问:

mysql -h127.0.0.1 -ppassword -uroot

不确定为什么您要尝试运行另一个容器来连接(也许您是想链接两个容器)

如果您正在使用带有docker-machine的Mac(或Windows),则需要连接到docker-machine虚拟机的IP地址。例如:

$ docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.9.0, build master : 16e4a2a - Tue Nov  3 19:49:22 UTC 2015
Docker version 1.9.0, build 76d6bc9
docker@default:~$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:E6:C7:20
          inet addr:192.168.99.100  Bcast:192.168.99.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fee6:c720/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18827 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10280 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1791527 (1.7 MiB)  TX bytes:2242596 (2.1 MiB)

接着连接到:

mysql -h192.168.99.100 -ppassword -uroot

这对我没有效果。我运行了第一个命令,它创建了镜像和容器。但是当我尝试使用dbvisualizer从我的主机连接到mysql时,它显示“通信失败”。我的主机是一台Mac机器,没有运行mysql。因此,我需要使用dbvisualizer连接到在我的docker容器内部运行的mysql。 - Knows Not Much
1
@KnowsNotMuch 这是因为你正在使用带有docker-machine的MacOS。Docker不能在MacOS上本地运行,请查看我对问题的编辑。 - Rico
错误 1130 (HY000):主机 '172.17.0.1' 不被允许连接到此 MySQL 服务器。 - saber tabatabaee yazdi
Boot2Docker在Windows上已经被弃用了吗? - saber tabatabaee yazdi

3

使用docker运行MYSQL数据库,设置root用户密码为pass,容器名称为sql-db,将主机的3306端口映射到容器的3306端口。

在已运行的sql-db容器中,通过bash进入容器内部。

使用mysql客户端连接MYSQL数据库,用户名为root,输入密码进行身份验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接