1. 创建并进入目标目录

首先,在 /opt 下创建一个专属目录。由于 /opt 权限通常较高,需要使用 sudo:

sudo mkdir -p /opt/wordpress-app
sudo chown $USER:$USER /opt/wordpress-app # 将所有权改为当前用户,方便操作
cd /opt/wordpress-app

  1. 编写 docker-compose.yml

在该目录下创建配置文件。我们将使用 相对路径,这样 Docker 会自动在 /opt/wordpress-app 下创建数据文件夹。

cd /opt/wordpress-app # 进入项目目录里

nano docker-compose.yml

粘贴以下内容

services:
db:
image: mariadb:10.11
restart: always
environment:
# 1. 数据库超级管理员 (root) 的密码
# 建议设置一个非常复杂的密码,仅用于后台维护,WordPress 运行不直接使用它。
MYSQL_ROOT_PASSWORD: your_root_password
# 2. 自动创建的数据库名称
# WordPress 的数据都会存放在这个名为 “wordpress” 的库里。
MYSQL_DATABASE: wordpress
# 3. WordPress 专用数据库用户名
# 为了安全,不建议让网页程序直接使用 root 账号,这里创建一个普通用户。
MYSQL_USER: wordpress_user
# 4. WordPress 专用数据库用户的密码
MYSQL_PASSWORD: your_password
volumes:
# 数据将存储在 /opt/wordpress-app/db_data
- ./db_data:/var/lib/mysql

wordpress:
image: wordpress:latest
restart: always
ports:
- “80:80” # 如果没被占用,直接用 80 端口
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: your_password
WORDPRESS_DB_NAME: wordpress
volumes:
# 代码和图片将存储在 /opt/wordpress-app/wp_data
- ./wp_data:/var/www/html
depends_on:
- db

  1. 启动容器

如果出现此类报错

root@VM-4-5-debian:/opt/wordpress-app# docker-compose up -d

-bash: docker-compose: command not found

更换较新的指令

docker compose up -d

如果出现这个错误原因很简单,服务器无法连接到 Docker Hub 官方镜像库。

具体来说,i/o timeout(连接超时)通常是由以下两个原因导致的:

IPv6 优先问题:报错信息中出现了 [2a03:2880…],这说明你的系统正尝试通过 IPv6 连接 Docker 官网,但腾讯云的公网环境可能对 IPv6 支持不畅。

网络环境限制:在国内直接拉取 docker.io 的镜像经常会遇到网络波动或被屏蔽的情况。

root@VM-4-5-debian:/opt/wordpress-app# docker compose up -d
[+] up 2/2
✘ Image mariadb:10.11 Error failed to resolve reference “docker.io/library/mariadb:10.11”: failed to do request: Head “https://registry-1.docke… 30.0s
! Image wordpress:latest Interrupted 30.0s
Error response from daemon: failed to resolve reference “docker.io/library/mariadb:10.11”: failed to do request: Head “https://registry-1.docker.io/v2/library/mariadb/manifests/10.11“: dial tcp [2a03:2880:f10e:83:face:b00c:0:25de]:443: i/o timeout
root@VM-4-5-debian:/opt/wordpress-app#

🛠️ 解决方案

彻底禁用 IPv6(针对腾讯云最有效的方案)

从报错日志看,Docker 一直在尝试通过 IPv6 (2a03:2880…) 连接。国内很多环境的 IPv6 虽然能分配地址,但路由是不通的。

最简单的办法:让 Debian 彻底优先使用 IPv4。

打开文件:

sudo nano /etc/gai.conf

找到第 54 行左右的这行代码: #precedence ::ffff:0:0/96 100

去掉前面的 # 号,保存退出(Ctrl+O, Enter, Ctrl+X)。

无需重启,直接再次执行:

docker compose up -d

依旧失败,不着急国内的环境就是复杂一些。

最后更换公共代理加速器

换成目前国内维护比较勤快的第三方代理加速器。

  1. 修改 daemon.json

将你之前的 registry-mirrors 内容替换为以下几个(这是目前 2026 年比较稳定的几个):

sudo nano /etc/docker/daemon.json

修改为:

{
“registry-mirrors”: [
https://docker.m.daocloud.io“,
https://huecker.io“,
https://dockerhub.timeweb.cloud“,
https://noohub.net
],
“log-driver”: “json-file”,
“log-opts”: { “max-size”: “100m”, “max-file”: “3” },
“live-restore”: true
}

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

启动(在wordpress-app目录里执行)

docker compose up -d

1.确认容器运行状态

docker compose ps

2.开放防火墙(腾讯云关键步骤)

你的 Docker 映射了端口(比如 8080:80 或 80:80),但腾讯云默认的安全组可能拦截了外部访问:

登录 腾讯云控制台 -> 云服务器 -> 实例。

点击 安全组 -> 修改规则。

添加一条:协议端口 TCP:80 (或者你设置的 8080),来源选择 0.0.0.0/0(全开)。

  1. 完成 Web 安装

在浏览器输入:http://你的服务器公网IP。

看到 WordPress 著名的“五分钟安装”界面,就说明成功了!

数据库连接信息如果你按之前的配置填,主机名(Host)记得填 db(这是 Compose 内部的服务名),而不是 localhost。

点击继续

填写基本信息

完结撒花

通过域名访问wordpress

  1. 准备 Nginx 配置文件

在 /opt/wordpress-app 目录下创建一个 nginx 文件夹,用来存放配置:

mkdir -p /opt/wordpress-app/nginx/conf.d

创建一个名为 default.conf 的配置文件:

nano /opt/wordpress-app/nginx/conf.d/default.conf

写入以下内容(记得替换域名):

server {
listen 80;
server_name yourdomain.com; # 替换成你的域名

location / {
    proxy_pass http://wordpress:80; # 这里的 wordpress 对应 compose 里的服务名
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

}

  1. 更新 docker-compose.yml

修改你现有的配置文件,把 Nginx 加进去,并注意端口冲突(WordPress 容器不需要再向外暴露 80 端口了,交给 Nginx 暴露)。

services:
db:
image: mariadb:10.11
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: your_password
volumes:
- ./db_data:/var/lib/mysql

wordpress:
image: wordpress:latest
restart: always
# 删掉之前的 ports: - “80:80”,因为我们不需要外部直接访问 WP
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: your_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp_data:/var/www/html
depends_on:
- db

nginx:
image: nginx:alpine
restart: always
ports:
- “80:80”
- “443:443”
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- wordpress

  1. 部署并验证

域名解析:在你的域名服务商处,将域名指向腾讯云服务器的公网 IP。

重启服务:

cd /opt/wordpress-app
docker compose up -d

访问域名看看效果

最后需要到wordpress后台设置里

访问:http://你的域名/wp-admin/

填写完,保存更改就可以通过域名访问我们的网站了。