近来由于某种原因xxx自己用docker搭建一个wordpress环境。把各个坑都踩了遍。这里记录一下。

新手上路,大佬勿喷。

这里我是win下本地搭好了然后导出数据库放docker里面导入sql文件起服务的。

一、docker部署的任意端口后一直跳转80

因为wordpress在安装的时候就已经绑定了端口,所以需要改成docker命令run的端口一样的端口。我直接在sql文件里面加两条:

修改服务器端口后需要修改wordpress的默认端口。我这里以run1234端口为例。

方法1:

  1. define(‘WP_SITEURL’‘http://127.0.0.1:1234’);  
  2. define(‘WP_HOME’‘http://127.0.0.1:1234’);  

这两个全局变量需要比较新的wordpress,应该版本大于2.2。

方法2:

如果不是的话,那就直接修改数据库中表wp_options。

  1. update wp_options set option_value=‘http://127.0.0.1:1234’ where option_name=‘siteurl’;  
  2. update wp_options set option_value=‘http://127.0.0.1:1234’ where option_name=‘home’;  

二、跳转/wp-admin/install.php显示未曾安装

wordpress不像其他cms一样,安装后会自动生成install.lock文件,wordpress是根据是否有数据库对应表的内容来判断是否安装的。

而这个坑是我自己sb了,为了配权限自己创建了个普通权限用户,wp-config.php也是用这个数据库用户登陆的,然后就很迷的没有连上数据库,exec进终端mysql可以用普通用户登陆。在wp-config.php里面改用数据库root用户

三、WordPress相对路径设置

终于可以进index.php了,不过css,js这些全挂了,原因是因为链接全是绝对路径127.0.0.1:1234/xxxxxx

查看网站的源代码发现网站wp-includes/option.php文件中存在函数get_option,该函数通过参数名来获取数据库中wp_options中的字段。

现在的要求是能使得wordpress使用任何ip都能正常解析,那么可以在这个函数中判断参数为home或者siteul的请求,如有该请求不去查询数据库直接返回需要的地址。

将函数进行如下修改:在函数开始部分加上判断并设置动态的ip地址.

然后就ojbk了。

参考链接:https://blog.csdn.net/hellbaby666/article/details/41645601

http://blog.oa25.org/?p=491

https://www.jianshu.com/p/992218bf872c

2019.03.07更新

在平常学习过程中,使用docker搭建漏洞环境是经常的。而在使用docker搭建wordpress的漏洞环境时,会有以下几点坑:

1.后台自动更新,导致漏洞修复。

解决方法:在wp-config.php末尾加上define('AUTOMATIC_UPDATER_DISABLED', true);即可。
但是最好还是在断网环境下进行,我在用这个方法的时候时灵时不灵。

2.wordpress安装时会绑定IP和端口,迁移到docker上时依然未改变。

解决方法:编辑wp-config.php.
require_once(ABSPATH . 'wp-settings.php'); 前面加上

$home = 'http://'.$_SERVER['HTTP_HOST'];
$siteurl = 'http://'.$_SERVER['HTTP_HOST'];
define('WP_HOME', $home);
define('WP_SITEURL', $siteurl);

动态获取ip端口来解决。

3.高版本的wordpress安装时同样将ip和端口写进数据库.如果上面的第二个解决方法仍然没有解决动态地址问题。那么可以试试以下方法:

use wordpress;update wp_options set option_value='/' where option_id in (1,2);
分类: Docker

4 条评论

甾醇 · 2019年4月22日 下午9:02

感谢大佬的分享……不知大佬有没有其他cms的docker化经验

    admin · 2019年4月27日 下午8:39

    除了像wordpress这种安装时会绑定ip域名端口的cms之外,其他的cms都可以用这么一个套路来docker化:
    1. 导出本地的cms的数据库
    2. 将源码和数据库导入docker
    两个步骤即可。

      甾醇 · 2019年4月30日 下午8:37

      动态地址只解决了IP问题,但端口还是会自动跳转到80……大佬有遇到这种问题吗?

        admin · 2019年5月15日 下午4:09

        你换个端口试试,记得把docker的镜像和容器都清理一下。实在抱歉最近一段时间都没有看博客所以回复的慢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注