Microsoft Azure-无法从VM外部访问Docker上运行的MySQL实例

Microsoft Azure-无法从VM外部访问Docker上运行的MySQL实例,mysql,azure,docker,ip,virtual-machine,Mysql,Azure,Docker,Ip,Virtual Machine,我在Microsoft Azure云上创建了一个VM(Ubuntu服务器18.04),安装了Docker,运行的是MySQL 5.7容器 问题是,当我尝试从VM外部连接到MySQL实例时(例如,直接安装在我的计算机上的MySQL Workbench),我会收到如下错误: Your connection attempt failed for user 'root' from your host to server at my_ip_address:3306: Can't connect to My

我在Microsoft Azure云上创建了一个VM(Ubuntu服务器18.04),安装了Docker,运行的是MySQL 5.7容器

问题是,当我尝试从VM外部连接到MySQL实例时(例如,直接安装在我的计算机上的MySQL Workbench),我会收到如下错误:

Your connection attempt failed for user 'root' from your host to server at my_ip_address:3306: Can't connect to MySQL server on 'my_ip_address' (60)

我怀疑我的虚拟机不允许外部IP访问,但我不知道如何允许使用Azure的某些IP建议使用of Workbench,那么您不需要远程访问数据库。

如果您使用默认值创建虚拟机。您可以在网络部分查看防火墙规则。在那里,您应该可以看到允许的入站和出站流量。默认情况下,azure上的虚拟机具有关联的NSG(网络安全组),除非您在创建时更改该属性或在创建后对其进行编辑

检查NSG是否具有正确的设置后。我猜MySQL的默认端口是TCP 3306。如果规则不存在,请添加它

之后,你应该检查Ubuntu防火墙。我认为默认情况下是向上的

试试这个:

sudo ufw status
然后这个:

sudo ufw disable
它将禁用防火墙,检查是否可以连接到MySQL实例。如果您成功连接到它,则通过以下方式启用Ubuntu防火墙:

sudo ufw enable
并添加防火墙规则以允许进入操作系统上TCP端口3306的流量:

sudo ufw allow from any to any port 3306 proto tcp
重新启动防火墙并检查新规则是否处于活动状态,包括:

sudo ufw status
希望能有帮助


关于这一点,

在Ubuntu 18.04的Azure VM上创建一个包含运行MySQL的容器。您可以按照以下步骤操作。最后,您将连接到它

首先。

创建包含运行MySQL的容器,并在此处执行以下命令:

docker run --name=mysql -d -p 3306:3306 mysql/mysql-server:latest
完成后,您可以使用命令查看根用户的密码:

docker logs mysql
结果如下:

然后使用命令连接mysql:

docker exec -it mysql mysql -uroot -p
并更改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
现在您可以退出并使用root用户和新密码连接mysql

秒。

创建一个远程连接MySQL的用户,你可以按照我回答的另一个

第三名。

创建规则以允许Azure门户上端口3306的流量

它在我的网站上运行,希望这能对你有所帮助

更新

您可以在此处添加网络安全组规则,如屏幕截图所示:


您可以使用mysql客户端从Ubuntu服务器连接吗?如果没有,您是如何运行docker实例的?让您的连接在服务器上工作,然后关注如何实现远程连接。@danblack您的意思是我在使用Computer VM docker之前检查VM docker之间的MySQL连接?@CharlesXu MSFT到目前为止还不错,但我不能像这里所说的那样配置MySQL服务器配置文件[因为我找不到文件/etc/mysql/mysql.conf.d/mysqld。cnf@ghassen我在本例中提供的解决方案是安装在Azure Ubuntu VM中的MySQL,而不是容器。两者之间有一些区别。您只需要为MySQL创建用户,而不必配置mysqld.cnf文件。这正是我所做的,但它不起作用…我是按照这个[tuto]()打开3306的,但在最后一步,我找不到子网关联的屏幕,如上面提到的“不工作”没有提供任何需要的信息来让你通过你遇到的任何障碍。这是我遇到的错误:13.69.122.96:3306:无法连接到“13.69.122.96”(60)上的MySQL服务器请:1检查mysql是否在服务器13.69.122.96上运行2检查mysql是否在端口3306上运行(注意:3306是默认值,但这是可以更改的)3检查根用户是否有权从您的地址连接到13.69.122.96(mysql权限定义哪些客户端可以连接到服务器以及从哪些机器连接)4确保在需要时提供密码,并使用13.69.122.96的正确密码从您连接的主机地址进行连接。建议人们放弃公共虚拟机上的所有网络安全只是要求这些虚拟机在受到攻击时变成僵尸网络/垃圾邮件。有一些机制可以帮助您治愈访问,帮助so用户在不损害其安全性的情况下获得他们想要的结果。您好@danblack我完全同意您的意见。但我不建议关闭防火墙。出于测试目的,这是故障排除的一部分。还要考虑到VM前面有防火墙(NSG)除了操作系统防火墙。即使你禁用操作系统防火墙,你也会受到VM NSG的保护。但是,我会在我的帖子中添加一个说明。谢谢你的消息..但是我找不到如何打开Azure Portal上的端口..你能解释更多吗?在我的屏幕上,我没有设置下的网络,我只有网络安全组!请通知我正在试用订阅。这可能是原因吗?@ghassen您只需要向与VM网络接口和Vnet中的子网关联的网络安全组添加规则。我没有访问门户的权限。我有访问Azure VM的权限。因此,我想检查是否有任何特定的入站端口处于打开状态。因此,我running@PSatishPatro如果可以运行CLI命令访问NSG,请使用该命令获取规则。