CXT - Enjoy Life | 生活、技术、交友、分享 CXT - Enjoy Life | 生活、技术、交友、分享
  • 首页
  • 特色专题
    • 一键网络重装系统 - 魔改版(适用于Linux / Windows)
    • 精英IDC计划 - 千万IDC计划(从入门到跑路)
    • CXT裸机系统部署平台(自定义安装任意系统)
    • OpenWRT-Virtualization-Servers
  • 分类目录
    • 站点公告
    • 技术分享
    • 生活感悟
  • 更多(More)
    • 浏览记录(Historical-Record)
    • 支付捐赠(Payment-Donation)
    • 隐私政策(Privacy-Policy)
    • 服务状态(Server-Status)
    • 友情链接(Link)
    • 联系我们(Contact-US)
    • 关于我们(About-Me)
Home › 技术分享 › WordPress在Docker容器中的部署迁移相关的常见问题
  • 2

WordPress在Docker容器中的部署迁移相关的常见问题

CXT
October 11, 2024

简介

前几天买了新杜甫,迁移博客中,遇到了一些小问题,顺路分享出来,供大家参考。

主要涉及以下问题:1、Docker中,WordPress的数据库配置文件wp-config.php的差异。2、WordPress迁移后的文件权限重新配置。3、WordPress的php.ini优化,避免上传失败。4、WordPress管理员密码忘记,进行重置。

WordPress在Docker容器中的部署迁移相关的常见问题-CXT - Enjoy Life | 生活、技术、交友、分享

让我们开始

一、WordPress的数据库配置文件wp-config.php的差异

常规部署的WordPress配置文件只需要在配置文件中,填写数据库的连接方式。如下:

define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'db:3306');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

但是Docker中部署的WordPress,wp-config.php需要加入以下函数。

用于获取Docker容器传递过来的数据库参数,否则将无法正确连接到Docker中的数据库。

// a helper function to lookup "env_FILE", "env", then fallback
if (!function_exists('getenv_docker')) {
	// https://github.com/docker-library/wordpress/issues/588 (WP-CLI will load this file 2x)
	function getenv_docker($env, $default) {
		if ($fileEnv = getenv($env . '_FILE')) {
			return rtrim(file_get_contents($fileEnv), "\r\n");
		}
		else if (($val = getenv($env)) !== false) {
			return $val;
		}
		else {
			return $default;
		}
	}
}

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );

/** Database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );

/** Database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );

/** Database hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', getenv_docker('WORDPRESS_DB_CHARSET', 'utf8') );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', getenv_docker('WORDPRESS_DB_COLLATE', '') );

二、WordPress迁移后的文件权限重新配置

在新机器还原备份好的WordPress程序目录时,即包含wp-admin、wp-content、wp-includes的这个顶级目录,映射到Docker容器后,发现网站无法上传文件,提示请输入FTP凭据(磁盘操作权限)来进行文件操作,所以判断文件和目录权限有问题。因此需要进入到Docker中的WP容器,对挂载的目录进行权限授予。

先进入WordPress的容器(wp-cxthhhhh-wordpress-1修改为你的WordPress容器名称或容器ID)

docker exec -it wp-cxthhhhh-wordpress-1 bash

我先查看了容器内现有的用户

cat /etc/passwd

然后授予权限

chown -R www-data /var/www/html
chmod -R 775 /var/www/html
chmod -R 777 /var/www/html/wp-content/

然后exit退出WP的容器,刷新你网站,即可发现权限正常,可以上传文件了。

三、WordPress的php.ini优化,避免上传失败。

Docker中的php.ini配置文件默认参数值很小,当我们上传大文件,如WordPress主题,可能就报错了。

那我们就在宿主机创建一个uploads.ini文件修改上传参数,一会再挂载到Docker中

我的宿主机uploads.ini文件放在/cxt/docker-data/wp-cxthhhhh/uploads.ini

博主设置的最大上传大小100MB,你可以自行修改下面的参数,直接用我的也没问题。

echo "file_uploads = On
memory_limit = 300M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 600
" > /cxt/docker-data/wp-cxthhhhh/uploads.ini

修改Docker容器的启动挂载参数,在原有的目录下加一行挂载文件

    volumes:
      - /cxt/docker-data/wp-cxthhhhh/data:/var/www/html
      - /cxt/docker-data/wp-cxthhhhh/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

然后重启容器

cd /cxt/docker-data/wp-cxthhhhh/ && docker compose up -d

即可发现大文件可以上传了。快去上传你66MB的博客主题吧!

四、WordPress管理员密码忘记,进行重置

通过查阅WordPress官方文档,需要修改当前激活的WP主题目录的functions.php文件。

在第一个【<?php】之后,添加一行修改密码的指令。

wp_set_password( 'my_new_password', 1 );

然而我的付费主题functions.php文件是加密的,全乱码。因此去找了开发者,开发者讲主题有考虑到这一点,预留了一个其他接口(也是在functions.php最前面执行),因此我成功的将上面的修改密码的代码写入了开发者指定的接口。(提示,如果你的主题也是加密的,可以咨询你的主题开发者)

然后使用新密码登录WordPress,发现不提示密码错误,但是一直返回登录页。就仔细阅读了官方文档

Reset your password

里面有一句话“Once you are able to login, make sure to go back and remove that code. It will reset your password on every page load until you do so.”

大意是,上述指令将会在每一次页面刷新时,重置你的密码,因此请在刷新使用后,立刻删除这一行。因为登陆后页面要再次加载,然后密码又被重置,登陆状态又掉了。所以才会没有报错,但一直返回登录页。

将上面添加的代码从当前激活主题的functions.php删除后,使用新密码登录,成功进入后台。

最后

成功解决WordPress的迁移问题。你也去试试迁移吧,玩坏了就来一起熬夜排查问题~~~

毕竟,搞迁移和刷机一样,这事情只能中午干!

(不然就像博主,现在还没睡,还有点兴奋,哈哈哈哈哈哈哈。)

Container Docker Linux Web Windows WordPress
2
Navicat Premium导入数据库报错(日期格式异常NO_ZERO_IN_DATE和NO_ZERO_DATE)的两种解决方法
Previous
DBeaver连接MySQL数据库报错、备份还原数据库的字符集报错。
Next

Recent Posts

  • 人力资源总监、董事办和证券部负责人的相继离开:从2000人到1446人,一家公司衰败的两个关键信号
  • CXT万字复盘:一位CIO亲历2000人公司“大企业病”晚期后的生存手册
  • 我的减重之路:揭秘饮食、运动、休息与能量管理的协同作用
  • PVE7升级PVE8教程(全过程带图片)
  • RHEL系列 8/9重置root密码方式(root密码忘记)

Related posts

【系统镜像】CentOS 7.x 网络安装镜像

【系统镜像】CentOS 7.x 网络安装镜像

September 3, 2020
487,954 1
【网络拓扑系列-1】PVE组网 软路由拓扑 单网口服务器主机 例子1

【网络拓扑系列-1】PVE组网 软路由拓扑 单网口服务器主机 例子1

November 1, 2020
285,309 0
【系统镜像】Debian 10 LXC/OVZ 最新模板 v1.3(开启SSH、时区、优化)

【系统镜像】Debian 10 LXC/OVZ 最新模板 v1.3(开启SSH、时区、优化)

November 7, 2020
639,919 1
DD系统读条卡住,Start up the partitioner,为什么,如何解决?

DD系统读条卡住,Start up the partitioner,为什么,如何解决?

September 5, 2020
76,862 3
2

简介 CXT - Enjoy Life

CXT - Enjoy Life | 生活、技术、交友、分享 - 自天佑之,吉无不利

网站导航

首页 特色专题 一键网络重装系统 - 魔改版(适用于Linux / Windows) 精英IDC计划 - 千万IDC计划(从入门到跑路) CXT裸机系统部署平台(自定义安装任意系统) OpenWRT-Virtualization-Servers 分类目录 站点公告 技术分享 生活感悟 更多(More) 浏览记录(Historical-Record) 支付捐赠(Payment-Donation) 隐私政策(Privacy-Policy) 服务状态(Server-Status) 友情链接(Link) 联系我们(Contact-US) 关于我们(About-Me)

友情链接

CXT | 自天佑之 吉无不利 润隍科技
Copyright © 2025 CXT - Enjoy Life | 生活、技术、交友、分享. Designed by nicetheme.
  • 首页
  • 特色专题
    • 一键网络重装系统 - 魔改版(适用于Linux / Windows)
    • 精英IDC计划 - 千万IDC计划(从入门到跑路)
    • CXT裸机系统部署平台(自定义安装任意系统)
    • OpenWRT-Virtualization-Servers
  • 分类目录
    • 站点公告
    • 技术分享
    • 生活感悟
  • 更多(More)
    • 浏览记录(Historical-Record)
    • 支付捐赠(Payment-Donation)
    • 隐私政策(Privacy-Policy)
    • 服务状态(Server-Status)
    • 友情链接(Link)
    • 联系我们(Contact-US)
    • 关于我们(About-Me)
  • Linux
  • PVE
  • Proxmox
  • Proxmox-VE
  • Server
  • Windows
  • 系统镜像
  • ISO
  • DD
  • CentOS

CXT

Administrator
64
Posts
0
Comments
80
Likes