代码之家  ›  专栏  ›  技术社区  ›  ChrisM

用Docker Compose设置WordPress+MySQL-“建立数据库连接时出错”

  •  0
  • ChrisM  · 技术社区  · 6 年前

    我正在尝试用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代理容器运行这个。您还可以看到我也在运行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,最新)。所有人都会犯同样的错误。非常令人沮丧。

    更让人沮丧的是,几个月前我就把这些都做了。这几乎是第一次。没有什么真正的改变,尽管现在有更多的内容,所以数据库转储文件要大得多(c.14MB)。我可能做错了什么?

    如果我访问mysite.local,就会得到“建立数据库连接时出错”。如果我访问mysite.local/wp/I则获取Apache“内部服务器错误”

    注意:网站的最初开发是在127.0.0.1的AMPPS WordPress安装下进行的。我只是将数据库导出到一个转储文件中,并将127.0.0.1的所有出现项更改为 mysite.local网站 .

    更新 :设置 WP_DEBUG true 提供以下浏览器错误消息:

    警告:mysqli_real_connect():服务器请求身份验证 中的客户端[缓存密码]未知的方法 /var/www/html/wp includes/wp-db.php在线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 );
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   ChrisM    6 年前

    好的,我通过降级到MySQL 5.7来解决了这个问题(我在我的文章中提到过这个版本,但当时我遇到了其他错误)。现在一切如期而至。似乎与 this 问题。