连接到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连接。您必须手动添加:
- 转到
Network interfaces
- select您的networking接口
- select
Network security group
- select你的小组(通常只有一个)
- select
Inbound security rules
- 点击
Add
和填充如下
- 最后应用更改并等待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,以便可以远程访问。
- 如何启用Docker容器的出站连接?
- 连接Docker Swarm集群时出错 – wsarecv:现有连接被远程主机强制closures
- 如何在Azure App Service Linux上为自定义的Docker镜像装载文件夹
- 如何链接运行在Azure上的mesos群集(dc / os)中的docker容器?
- 在Linux上的Azure Web应用程序中运行dotnet核心docker映像时没有find可执行的匹配命令“dotnet – / .. /。dll”
- 一旦容器完成处理,如何自动停止虚拟机?
- 与–net部署在azure色不绑定
- 从运行在Docker容器上的jasperserver失败的SQLServer连接?
- 无法使用docker运行dotnet核心预览2项目