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

Microsoft Azure - Cannot access MySQL Instance running on Docker from outside the VM

我在安装了 Docker 的 Microsoft Azure 云上创建了一个 VM(Ubuntu 服务器 18.04)并且我是 运行 一个 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)

我怀疑我的 VM 不允许外部 IP 访问,但我不知道如何允许某些 IP 使用 Azure

建议使用 Workbench 的 SSH tunnel feature 然后你不需要让你的数据库可以远程访问。

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

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

之后,您应该检查 Ubuntu 防火墙。我认为默认情况下是 up.

试试这个:

sudo ufw status

然后是:

sudo ufw disable

它将禁用防火墙,检查您是否可以连接到 MySQL 实例。如果您成功连接到它,则启用 Ubuntu 防火墙:

sudo ufw enable

并添加防火墙规则以允许传入流量到 OS 上的 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

完成后可以使用命令查看root用户的密码:

docker logs mysql

结果会是这样的:

然后使用命令连接mysql:

docker exec -it mysql mysql -uroot -p

并更改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

现在您可以退出并使用带有新密码的 root 用户连接 mysql。

第二

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

三.

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

它适用于我的网站,希望对您有所帮助。

更新

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