You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法使用Docker部署搭配PostgreSQL数据库的WordPress

嘿,我看你在Docker环境下用pg4wp搭WordPress+PostgreSQL的时候栽了跟头,结合你给的命令和这类场景常踩的坑,我整理了几个大概率能解决问题的方向:

1. 先把PostgreSQL的用户权限捋顺

你现在启动PostgreSQL的命令只设了密码和数据库名,但WordPress默认会用root作为数据库用户名去连接——可PostgreSQL里根本没有root这个用户啊!这绝对会导致连接失败。

解决步骤
启动PostgreSQL的时候,多加一个POSTGRES_USER环境变量,指定一个WordPress能用的用户名,比如wpuser

docker run -e POSTGRES_PASSWORD=securepassword -e POSTGRES_DB=abcd -e POSTGRES_USER=wpuser --name postgresql-wordpress -v "$PWD/database":/var/lib/postgresql/data -p 5432:5432 -d postgres:latest

对应的,启动WordPress时也得加上WORDPRESS_DB_USER=wpuser这个环境变量,不然它还是会傻呵呵地用root去连。

2. 容器之间的网络别搞崩了

你提到用<postgres_container_ip>或者--link来连数据库,这里有两个常见的坑:

  • 要是用--link,链接名称必须和PostgreSQL容器的--name完全一致!你的PostgreSQL容器名叫postgresql-wordpress,那WordPress的启动命令里应该写--link=postgresql-wordpress:postgres,然后WORDPRESS_DB_HOST=postgres:5432——这样WordPress容器能直接通过postgres这个别名访问数据库,不用手动记IP,省心多了。
  • 更推荐的方式是用Docker自定义网络(--link其实已经是旧特性了):
    先创建一个专属网络:
    docker network create wp-net
    
    启动PostgreSQL时加入这个网络:
    docker run -e POSTGRES_PASSWORD=securepassword -e POSTGRES_DB=abcd -e POSTGRES_USER=wpuser --name postgresql-wordpress --network=wp-net -v "$PWD/database":/var/lib/postgresql/data -p 5432:5432 -d postgres:latest
    
    启动WordPress时也加入同一个网络,直接用容器名当主机名:
    docker run -e WORDPRESS_DB_PASSWORD=securepassword -e WORDPRESS_DB_NAME=abcd -e WORDPRESS_DB_USER=wpuser -e WORDPRESS_DB_HOST=postgresql-wordpress:5432 --name wordpress-pg --network=wp-net -p 8080:80 -d wordpress:latest
    
    这种方式网络更稳定,不会因为容器重启IP变了就断连。
3. 重中之重:pg4wp插件必须装对

WordPress官方镜像天生只认MySQL,不装pg4wp这个适配器,它根本不知道怎么和PostgreSQL说话!这绝对是大多数人踩的坑。

有两种靠谱的安装方式:

方式一:自定义WordPress镜像(推荐)

写一个简单的Dockerfile

FROM wordpress:latest

# 下载pg4wp的适配文件替换默认的数据库处理文件
RUN curl -o /usr/src/wordpress/wp-content/db.php https://raw.githubusercontent.com/kevinoid/pg4wp/master/db.php

然后构建自己的镜像:

docker build -t wordpress-pg4wp .

之后用这个wordpress-pg4wp镜像启动WordPress,别再用官方的wordpress:latest了。

方式二:手动进容器安装(临时用用可以)

如果不想折腾镜像,先进入运行中的WordPress容器:

docker exec -it wordpress-pg bash

然后下载pg4wp的适配文件到wp-content目录:

curl -o /var/www/html/wp-content/db.php https://raw.githubusercontent.com/kevinoid/pg4wp/master/db.php

⚠️ 注意:这种方式容器重启后修改就没了,所以长期用还是推荐自定义镜像。

4. 版本兼容性要注意
  • 别用太新的WordPress或者PostgreSQL版本!比如最新的WordPress 6.x得用kevinoid维护的pg4wp分支(原作者的版本已经停更很久了),PostgreSQL可以试试postgres:14而不是latest(现在latest是16,可能有兼容性问题)。

要是你能把Docker日志里的具体报错信息贴出来(比如是连接超时、权限错误还是SQL语法报错),我还能帮你更精准地定位问题~

内容的提问来源于stack exchange,提问作者hvardhan

火山引擎 最新活动