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

我已经在这个主题上search,发现了几个线程。 基于这些线程,我遵循以下步骤。 但是我面临一个问题。

基本上,我想为mysql创build一个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数据库。

编辑:: —–解决scheme的工作——

感谢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; 6. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 7. exit; 8. docker-machine env default 

使用在步骤8中获得的IP地址。端口是3306,用户是root,密码是密码,数据库是MyDB。

连接成功!

所以你基本上需要将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 VM的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