Docker-Compose WordPress MySql 连接不上

3
我在连接我的WordPress网站时遇到了502网关错误。查看日志,我看到了这个错误。
MySQL Connection Error: (1045) Access denied for user 'root'@'172.23.0.3' (using password: YES)

如果我不更改密码并将它们全部保存在 WordPress 上,似乎它可以正常工作。我假设dockerfiles只使用默认密码,但是在查看它们后,我只看到它们从环境中获取密码。但它似乎没有从我设置的环境中获取密码。

version: '2'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: *****
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: *****

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8085:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_PASSWORD: ******
volumes:
    db_data:

我希望*****是相同的密码。

以下是我的WordPress变量转储:

HOSTNAME=55333eceeda8
PHP_INI_DIR=/usr/local/etc/php
PHP_ASC_URL=https://secure.php.net/get/php-5.6.30.tar.xz.asc/from/this/mirror
WORDPRESS_DB_PASSWORD=test
PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2
PHP_MD5=68753955a8964ae49064c6424f81eb3e
PHPIZE_DEPS=autoconf        file        g++         gcc         libc-dev        make        pkg-config      re2c
PHP_URL=https://secure.php.net/get/php-5.6.30.tar.xz/from/this/mirror
WORDPRESS_DB_HOST=db:3306
WORDPRESS_VERSION=4.7.2
PHP_LDFLAGS=-Wl,-O1 -Wl,--hash-style=both -pie
APACHE_ENVVARS=/etc/apache2/envvars
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
GPG_KEYS=0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3
PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2
PWD=/var/www/html
SHLVL=1
HOME=/root
PHP_SHA256=a363185c786432f75e3c7ff956b49c3369c3f6906a6b10459f8d1ddc22f70805
WORDPRESS_SHA1=7b687f1af589c337124e6247229af209ec1d52c3
APACHE_CONFDIR=/etc/apache2
PHP_EXTRA_BUILD_DEPS=apache2-dev
PHP_VERSION=5.6.30
PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2
_=/usr/bin/env

我看到了数据库密码。这里是SQL密码:
root@50ec696f0f67:/# env                                                                                                                                                                                   
HOSTNAME=50ec696f0f67
MYSQL_VERSION=5.7.17-1debian8
MYSQL_DATABASE=wordpress
MYSQL_PASSWORD=test
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
MYSQL_MAJOR=5.7
GOSU_VERSION=1.7
MYSQL_USER=wordpress
MYSQL_ROOT_PASSWORD=test
_=/usr/bin/env

我在这里看到两个密码。因此出于某种原因,我的WordPress容器被MySQL容器拒绝。


1
你在WordPress中使用环境变量吗?你尝试过转储WordPress使用的变量来查看是否是环境变量吗? - mickadoo
我以为我已经使用docker-compose文件将它们发送了。但我会实例化并转储它们,然后发布我得到的结果。 - Kyle Calica-St
1
我猜WordPress使用了一些环境变量,如果那是它获取WORDPRESS_DB_HOST的地方。MYSQL_ROOT_PASSWORD和MYSQL_PASSWORD是一样的吗?也许在WordPress源代码中,你可以在尝试连接数据库之前转储所使用的变量。然后执行db容器并检查是否可以使用这些详细信息登录。两者之间有不同步的地方-继续挖掘! - mickadoo
1
我不是WordPress专家,但它是否支持开箱即用的环境变量使用?也许它正在使用您在设置期间输入的值作为密码?您的wp-config.php是否使用环境变量? - mickadoo
所以我可以查看env变量并且它们在容器内设置。但是是的,我需要查看我的wp-config.php文件。 - Kyle Calica-St
显示剩余5条评论
2个回答

9

警告:由于我的服务器上只有这个容器,所以我并不介意删除所有内容。盲目运行这些命令可能会清除您的docker容器、卷等。

通过删除docker卷,我能够解决我的问题。

即使您运行以下命令:

$ docker-compose stop && docker-compose rm -v

也无法删除卷。

每次我尝试创建新的docker容器时,它使用存储旧mysql数据库和旧mysql用户表的旧卷,因此我的旧密码是错误的。

要摆脱旧的docker卷,请使用:

docker volume rm $(docker volume ls -q )

将删除所有docker卷。然后重新构建,这将使用来自您的env变量的更新表创建一个新卷。


1
啊,现在有意义了。回想起来总是很容易的 :-) 很高兴你找到了问题的根源。 - mickadoo
1
谢谢!你的帮助非常有用,我很感激 :D - Kyle Calica-St
1
非常感谢。我已经疯狂搜索了为什么删除容器或镜像无法解决mysql密码问题,原来所有数据都在卷中。删除数据库卷解决了这个问题。 - Shnigi
@Shnigi 哈哈,是啊!我也快疯了!我认为 Docker 在删除容器和镜像时需要更详细地说明。也许可以使用不同的删除方法,它可以彻底清除所有内容,但我确定这对团队来说不是最重要的事情。 - Kyle Calica-St

1
一个带有修改后的docker-compose文件的工作示例: https://github.com/sahil87/wordpress-mysql-docker/blob/master/docker-compose.yml 修改内容:
将WORDPRESS_DB_HOST修改为 WORDPRESS_DB_HOST: foldername_db_1.foldername_default:3306 这似乎是docker-compose工作方式或mysql镜像的最近更改,因为我也只使用了这个。找不到任何文档 :( ,花了两天时间才弄清楚。希望这能节省您的时间!

仍然出现以下警告:Warning: mysqli::mysqli(): (HY000/1045): Access denied for user 'root'@'172.23.0.3' (using password: YES) in - on line 22,即使尝试运行您的代码也是如此。 - Kyle Calica-St
奇怪。在我的版本中尝试使用 docker rm $(docker ps -aq); docker-compose up; docker exec -it wordpressmysqldocker_wordpress_1 bash。一旦进入docker环境:apt-get update; apt-get install netcat;nc -zv wordpressmysqldocker_db_1.wordpressmysqldocker_default 3306 的输出是什么?还可以尝试使用172.23.0.2代替mysql主机名。 - Sahil Ahuja
这是我的卷。我不得不使用 docker volume rm $(docker volume ls -q) 删除所有的卷,然后它就可以工作了!我也能够使用旧的 docker-compose.yml - Kyle Calica-St

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接