无法使用Docker部署搭配PostgreSQL数据库的WordPress
嘿,我看你在Docker环境下用pg4wp搭WordPress+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去连。
你提到用<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其实已经是旧特性了):
先创建一个专属网络:
启动PostgreSQL时加入这个网络:docker network create wp-net
启动WordPress时也加入同一个网络,直接用容器名当主机名: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
这种方式网络更稳定,不会因为容器重启IP变了就断连。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
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
⚠️ 注意:这种方式容器重启后修改就没了,所以长期用还是推荐自定义镜像。
- 别用太新的WordPress或者PostgreSQL版本!比如最新的WordPress 6.x得用kevinoid维护的pg4wp分支(原作者的版本已经停更很久了),PostgreSQL可以试试
postgres:14而不是latest(现在latest是16,可能有兼容性问题)。
要是你能把Docker日志里的具体报错信息贴出来(比如是连接超时、权限错误还是SQL语法报错),我还能帮你更精准地定位问题~
内容的提问来源于stack exchange,提问作者hvardhan




