连接到Microsoft Azure虚拟机中的Docker容器内的MySQL服务器

我在Microsoft Azure上创build了一个Ubuntu 15.10虚拟机。 在服务器上,我创build了一个运行MySQL的Docker容器(IP:172.17.0.2)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4255233555db mysql "/entrypoint.sh mysql" 16 hours ago Up 16 hours 0.0.0.0:3306->3306/tcp compose_mysql_1 

我可以通过ssh连接到VM,然后访问运行在Docker容器中的MySQL服务器。

我现在想从外部访问MySQL服务器,这样我的Microsoft Azure上的WebApp(相同的资源组)就可以连接到数据库。

我已经将VM的端口3306转发到172.17.0.2:3306。

使用本地PC上的MySQL-Workbench,我无法连接到MySQL服务器。 事实上,我不确定我需要提供什么凭据来连接。 我试着用虚拟机的公共IP和MySQL服务器的根密码。 但是我不应该在某个地方为虚拟机本身提供密码和用户吗?

除了实际VM上的防火墙以外,Azure还使用单独的VPCnetworking安全组pipe理端口安全。 默认情况下,与您的虚拟机关联的networking组不允许在端口3306上的入站TCP连接。您必须手动添加:

  1. 转到Network interfaces

图1

  1. select您的networking接口

在这里输入图像说明

  1. selectNetwork security group

在这里输入图像说明

  1. select你的小组(通常只有一个)

在这里输入图像说明

  1. selectInbound security rules

在这里输入图像说明

  1. 点击Add和填充如下

在这里输入图像说明

  1. 最后应用更改并等待1-2分钟(新的设置传播正确的时间,虽然它应该立即)

在这里输入图像说明

魔法!

直接使用官方MySQL映像的替代方法

我也有麻烦得到正式的MySQL映像运行和访问。 sameersbn / docker-mysql提供了一个很好很容易的包装器,可以让你指定要设置的用户和数据库。

我的docker组成文件有以下部分:

 db: image: sameersbn/mysql:latest volumes: - /opt/mysql/data:/var/lib/mysql environment: - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - DB_NAME=theDatabaseName ports: - "3306:3306" 

细节:

  • image – 上面提到的包装。
  • volumes – 映射持久主机上的数据。
  • environment – 定义数据库设置的variables。 既可以像DB_NAME那样提供纯文本,也可以通过${...}语法访问环境variables。
  • ports – 映射出主机上的端口3306,以便可以远程访问。