mysql - 使用 Docker Compose 设置 WordPress + MySQL - 'Error establishing a database connection'

标签 mysql wordpress docker docker-compose

我尝试使用 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,并且工作正常 - 我可以使用撰写文件中指定的密码登录,并且我可以看到数据库具有正确的名称并从 ./db/initdb.d 下的 sql 转储文件填充。另外 docker exec -it <container_id> bin/bash 向我显示 wp 卷已安装到容器中,并且 wp-config.php 文件在那里。最初我只是安装 wp-contents 文件夹,但即使安装整个 wp 文件夹也会给我同样的错误。我还尝试过各种版本的 mySQL(5.6、5.7、最新)。所有人都给出相同的错误。非常令人沮丧。

更令人沮丧的是,我几个月前就已经完成了这一切。它几乎是第一次起作用。尽管现在内容更多了,但数据库转储文件更大了(约 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 会显示以下浏览器错误消息:

Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in /var/www/html/wp-includes/wp-db.php on line 1531

这是我在 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 解决了这个问题(我在帖子中提到了该版本,但当时我遇到了其他错误)。现在一切都按预期进行。似乎与 this 有关问题。

关于mysql - 使用 Docker Compose 设置 WordPress + MySQL - 'Error establishing a database connection',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53492549/

相关文章:

java - 加载共享库 : libX11. so.6 时出错:无法打开共享对象文件:linux docker 容器中没有这样的文件或目录

mysql - 似乎无法使用 phpmyadmin 将多列添加到我的数据库

mysql - 在sql子查询中访问变量

mysql - 我应该使用什么样的索引?

php - 如何在 WooCommerce 中隐藏免费产品的支付网关?

django - Elastic Beanstalk 上的 Docker + Django

bash - Bash的版本? —在Docker的构建上下文中

mysql - 返回所有带 count(*) 的行,包括 count(*)=0

wordpress - 将元框添加到 WordPress 选项页面

wordpress - 将灯箱效果添加到 NextGen Gallery WordPress