无法连接到在vagrant vm中运行的dockerised mysql

注意:这是一个与这里描述的不同的问题: 如何连接到virtualbox vagrant中的mysql服务器

我有一个docker容器里面运行的mysql,它本身在一个Vagrant虚拟机中运行。 我想连接到我的主机(在这种情况下使用一些Java代码)的MySQL数据库,但我得到一个exception,指出MySQL是不可访问的:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 

很明显,Java代码没有错。

为了解决这个问题,我开始在虚拟机上打开一个SSH会话。 一旦在虚拟机上,我可以使用默认的端口(3306)获得docker集装箱的IP地址和telnet。 这部分是非常清楚的工作 – MySQL的另一边拿起。 (我有dockerised mysql的绑定地址设置为0.0.0.0,所以mysql可以对外界说话):

 vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' b80e4b883062 172.17.0.2 vagrant@vagrant-ubuntu-trusty-64:~$ telnet 172.17.0.2 3306 Trying 172.17.0.2... Connected to 172.17.0.2. Escape character is '^]'. J ...some garbled text here, as expected... 

当我移动一步并尝试通过在我的stream浪文件中指定的转发端口连接到MySQL数据库时,问题首先体现出来:

 config.vm.network "private_network", ip: "192.168.56.101" config.vm.network "forwarded_port", guest: 3306, host: 3306 

尝试从VM或我的主机通过转发的端口远程login到dockerised MySQL数据库产生以下内容:

 vagrant@vagrant-ubuntu-trusty-64:~$ telnet 192.168.56.101 3306 Trying 192.168.56.101... telnet: Unable to connect to remote host: Connection refused 

我在这里有三种可能性。

一:出于某种原因,端口转发不起作用。

二:它的工作原理,我试图连接不正确的IP地址。

三:我不了解端口转发背后的一些基本概念,这不是它的工作原理。

一些更多的细节:我的主机操作系统是Ubuntu 16.10。 Vagrant框是官方的Ubuntu Server(Trusty Tahr)框。

编辑:

docker ps命令的输出:

 vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a0dfd2d9176 testdb:latest "docker-entrypoint..." 19 seconds ago Up 18 seconds 3306/tcp testdb vagrant@vagrant-ubuntu-trusty-64:~$