mysql - 使用 Docker Compose 设置 WordPress + MySQL - “建立数据库连接时出错”
问题描述
我正在尝试使用 Docker Compose 在本地设置 WordPress + MySQL,但我不断收到臭名昭著的“建立数据库连接时出错”错误。我在运行 Mojave 的 Mac 上,并将 127.0.0.1 映射mysite.local
到/etc/hosts
. 以下是我的 docker-compose.yml (显然是 'mysite' 和密码条目是替换):
version: '3'
services:
mysite-wp-db:
image: mysql:latest
volumes:
- ./db/initdb.d:/docker-entrypoint-initdb.d
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_pwd
MYSQL_DATABASE: wordpress
MYSQL_USER: some_user
MYSQL_PASSWORD: pwd
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysite-wp-db
MYSQL_ROOT_PASSWORD: root_pwd
PMA_ABSOLUTE_URI: http://mysite.local/
ports:
- "8080:80"
restart: always
depends_on:
- mysite-wp-db
mysite-wp:
depends_on:
- mysite-wp-db
image: wordpress:latest
restart: always
expose:
- "80"
environment:
- VIRTUAL_PORT=80
- VIRTUAL_HOST=mysite.org,mysite.com,mysite.local
volumes:
- ./wp:/var/www/html
networks:
default:
external:
name: mysite-nginx-proxy
我正在使用流行的 jwilder/nginx-proxy 容器运行它。您还可以看到我也在运行 phpmyadmin,并且工作正常 - 我可以使用 compose 文件中指定的密码登录,并且我可以看到数据库具有正确的名称并从 .sql 转储文件中填充./db/initdb.d
。还docker exec -it <container_id> bin/bash
显示 wp 卷已安装到容器中,并且 wp-config.php 文件在那里。最初我只是安装 wp-contents 文件夹,但即使安装整个 wp 文件夹也会给我同样的错误。我还尝试了各种版本的 mySQL(5.6、5.7、最新版本)。都给出相同的错误。非常令人沮丧。
更令人沮丧的是,几个月前我已经完成了这一切。它几乎是第一次工作。什么都没有真正改变,虽然现在有更多的内容,所以 db 转储文件要大得多(c. 14MB)。我可能做错了什么?
如果我访问 mysite.local,我会得到“建立数据库连接时出错”。如果我访问 mysite.local/wp/ 我得到 Apache 'Internal Server Error'
注意:该站点的初始开发是在 AMPPS WordPress 安装下进行的,位于 127.0.0.1。我只是将数据库导出到转储文件中,并将所有出现的 127.0.0.1 更改为mysite.local
.
更新:设置WP_DEBUG
为true
给我以下浏览器错误消息:
警告:mysqli_real_connect():服务器在第 1531 行的 /var/www/html/wp-includes/wp-db.php 中请求客户端未知的身份验证方法 [caching_sha2_password]
这就是我在 wp-includes/wp-db.php 中的第 1530-33 行所拥有的:
if ( WP_DEBUG ) {
mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
} else {
@mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
}
解决方案
好的,我通过降级到 MySQL 5.7 解决了这个问题(我在帖子中提到了那个版本,但当时我遇到了其他错误)。现在一切都按预期工作。似乎与这个问题有关。
推荐阅读
- android - 使用 Android Studio 签署 APK 时出现 Proguard 错误
- java - 如何在 Windows Calculator 中将 JButtons 彼此相邻添加而没有间隙/空间?
- firebase - 解析函数触发 Firebase 时发生错误
- java - 非活动视图中的警报对话框
- java - 构建我的 Java Swing 应用程序。IE何时何地使用类而不是
- html - 将文本对齐到按钮单选的右侧
- c# - 控制所有呈现的模式 iOS
- python - 魔术 8 球程序循环未按预期工作
- r - 在 R 中循环查找上一个匹配项
- r - R Highcharter Drilldown Set Ymin & Ymax + Title for each layer