连接到Microsoft Azure VM中的Docker容器内的MySQL Server

时间:2016-02-09 15:03:46

标签: mysql azure docker

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

from itertools import combinations

def ratios(**kwargs):
    pairs = combinations(sorted(kwargs.keys()), 2)
    return dict((p + q, kwargs[p] / kwargs[q]) for p, q in pairs)

print(ratios(a=600, b=3, c=2))    

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

我现在想从外部访问MySQL-Server,以便我在Microsoft Azure(同一个Ressource Group)上的WebApp可以连接到数据库。

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

使用我本地PC上的MySQL-Workbench,我无法连接到MySQL-Server。 事实上,我不确定我需要提供哪些凭据来连接。 我尝试使用VM的公共IP和MySQL-Server的root密码。但我不应该在某处提供VM本身的密码和用户吗?

2 个答案:

答案 0 :(得分:1)

除了实际VM上的防火墙之外,Azure使用单独的VPC网络安全组管理端口安全性。默认情况下,与VM关联的网络组不允许端口3306上的入站TCP连接。您必须手动添加:

  1. 转到Network interfaces
  2. Pic 1

    1. 选择您的网络接口
    2. enter image description here

      1. 选择Network security group
      2. enter image description here

        1. 选择您的论坛(通常只有一个)
        2. enter image description here

          1. 选择Inbound security rules
          2. enter image description here

            1. 点击Add并填写如下
            2. enter image description here

              1. 最后应用更改并等待1-2分钟(新设置正确传播的时间,尽管应该立即进行)
              2. enter image description here

                魔术!

答案 1 :(得分:0)

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

我也遇到了使官方MySQL图像运行和访问的麻烦。 sameersbn/docker-mysql提供了一个简单易用的包装器,允许您指定要设置的用户和数据库。

我的docker-compose文件包含以下部分:

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 - 定义数据库设置的变量。使用DB_NAME提供纯文本,或通过${...}语法访问环境变量。
  • ports - 映射主机上的端口3306,以便远程访问它。