Docker-Compose WordPress MySql 无法连接

Posted

技术标签:

【中文标题】Docker-Compose WordPress MySql 无法连接【英文标题】:Docker-Compose WordPress MySql Can't Connect 【发布时间】:2017-07-05 13:21:45 【问题描述】:

我在尝试连接到我的 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 容器拒绝了。

【问题讨论】:

你在 wordpress 中使用环境变量?您是否尝试过转储 wordpress 使用的变量以查看它是否是 env 变量? 我以为我确实使用 docker-compose 文件发送了它们。但我会实例化并转储它们并发布我得到的内容。 你可能是对的,我对 wordpress 不太熟悉,但我只是想知道它们是否被硬编码的东西覆盖了 好吧,我假设 wordpress 正在使用一些环境变量,如果那是它获取 WORDPRESS_DB_HOST 的地方。 MYSQL_ROOT_PASSWORDMYSQL_PASSWORD 一样吗?也许在 wordpress 源代码中,您可以在尝试连接数据库之前转储使用的变量。然后执行到 db 容器并检查您是否可以使用这些详细信息登录。两者之间有些不同步 - 继续挖掘! 再说一次,我不是 wordpress 专家,但它是否支持开箱即用的环境变量?也许它在设置密码时使用了您的值?你的 wp-config.php 是否使用环境变量? 【参考方案1】:

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

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

即使你运行这个命令:

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

不删除卷。

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

摆脱旧的 docker 卷使用:

docker volume rm $(docker volume ls -q )

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

【讨论】:

啊,现在说得通了。回想起来总是很容易 :-) 很高兴你深入了解了它 谢谢!您的帮助非常有用和感激:D 啊,非常感谢。我正在疯狂搜索为什么删除容器或图像不能解决 mysql 密码问题。所有数据都在卷中。删除数据库卷解决了这个问题。 @Shnigi 哈哈是的!我也快疯了!我相信 Docker 在删除容器和映像时需要对此更加详细。也许是一种不同的移除方法,它可以摧毁所有东西,但我相信这对团队来说是图腾柱的底部,哈哈。【参考方案2】:

修改 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 映像的最新变化,因为即使我也只使用它。找不到任何文档 :( ,花了 2 天时间才弄清楚。希望这可以节省您一些时间!

【讨论】:

没有用。仍然得到:Warning: mysqli::mysqli(): (HY000/1045): Access denied for user 'root'@'172.23.0.3' (using password: YES) in - on line 22 甚至尝试运行你的。 奇怪。在我的版本中尝试docker rm $(docker ps -aq); docker-compose up; docker exec -it wordpressmysqldocker_wordpress_1 bash。一旦进入码头:apt-get update; apt-get install netcat;nc -zv wordpressmysqldocker_db_1.wordpressmysqldocker_default 3306 的输出是什么?也尝试使用 172.23.0.2 而不是 mysql 主机名。 这是我的卷。我必须使用docker volume rm $(docker volume ls -q) 删除我的所有卷然后它才起作用!我也可以使用旧的docker-compose.yml

以上是关于Docker-Compose WordPress MySql 无法连接的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose构建wordpress

Docker-compose部署wordpress

使用docker-compose部署WordPress项目

docker-compose wordpress

畅享docker-compose之旅及编排wordpress报错解决

docker-compose wordpress mysql连接被拒绝