如何使用 wordpress docker 映像从 azure 应用程序服务连接到 mysql 的 azure 数据库?

Iva*_*ang 6 mysql wordpress azure docker azure-web-app-service

我有一个天蓝色的应用程序服务,使用来自 docker hub 的最新 wordpress 图像。azure应用程序服务的屏幕截图: 在此输入图像描述

然后在 azure 应用程序服务 -> 应用程序设置中,我添加了以下键/值对,这些键/值对将用于连接 mysql 的 Azure 数据库:

  1. WORDPRESS_DB_HOST
  2. WORDPRESS_DB_NAME
  3. WORDPRESS_DB_PASSSWORD
  4. WORDPRESS_DB_USER

截屏: 在此输入图像描述

在我的 Azure mysql 数据库中,我启用了公共访问/允许从任何 azure 服务进行公共访问/还添加了我的客户端 IP 和此 IP 范围 0.0.0.0 - 255.255.255.255。我可以从我的客户端访问它并创建将由 azure 应用程序服务使用的数据库。截图如下: 在此输入图像描述

在服务器参数中,我还关闭了 require_secure_transport 设置: 在此输入图像描述

最后,我尝试启动该网站,但它抛出错误“建立数据库连接时出错”,截图如下: 在此输入图像描述

我是 wordpress / docker 的新手,不知道如何解决这个问题。我还查看了一些视频/文档,没有看到任何其他配置差异。您能指导我如何解决这个问题吗?非常感谢。

O. *_*nes 3

您收到此错误消息。

警告:mysqli_real_connect():(HY000/1045)>:用户'ivan'@'52.xx.xxx.xx'的访问被拒绝(使用密码:YES)

这意味着 MySQL 接收、处理并拒绝了您的 WordPress 实例的连接尝试。因此,您知道主机名是正确的,并且您的云提供商的防火墙设置允许您的 WordPress 实例与 MySQL 实例交换网络数据。

怎么了?

MySQL 的用户名/帐户名设置有一个怪癖。帐户名称可以类似于'ivan'@'localhost''ivan'@'%'(甚至类似于'ivan'@'192.0.22.33')。

第一个仅允许从本地主机登录(或通过 ssh 隧道)。第二个允许从 登录'%',即任何主机。您的 WordPress 实例需要第二个才能访问 MySQL。

当您从计算机登录到 MySQL 时,请执行此操作。

SELECT host, user FROM mysql.user WHERE user='ivan';
Run Code Online (Sandbox Code Playgroud)

您应该看到两行,如下所示

 host       user  
 ----       ---   
 %          ivan  
 localhost  ivan 
Run Code Online (Sandbox Code Playgroud)

可能是'%'作为主机的帐户丢失了。如果是这样,则意味着您需要创建另一个 MySQL 帐户并授予其访问您的数据库的权限。像这样做。

SELECT host, user FROM mysql.user WHERE user='ivan';
Run Code Online (Sandbox Code Playgroud)

接下来,确保您刚刚创建的用户帐户(您的 WordPress 软件将使用该帐户连接到 MySQL)可以访问您的数据库。

 host       user  
 ----       ---   
 %          ivan  
 localhost  ivan 
Run Code Online (Sandbox Code Playgroud)

如果您仍然收到错误消息,则您帐户的密码可能与'ivan'@'%'您在 WordPress 配置中输入的密码不匹配。你可以改变它

CREATE USER 'ivan'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

如果仍然给出相同的错误消息,则您的云供应商可能需要 TLS 才能连接到 MySQL。您可能需要咨询他们的支持团队。

(这是设置新 WordPress 实例的常见障碍。)