docker部署wordpress

1. 创建并进入目标目录

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

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

2. 编写 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

3. 启动容器

如果出现此类报错

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。

  1. 打开文件:
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:8080:80),但腾讯云默认的安全组可能拦截了外部访问:

  • 登录 腾讯云控制台 -> 云服务器 -> 实例。
  • 点击 安全组 -> 修改规则
  • 添加一条:协议端口 TCP:80 (或者你设置的 8080),来源选择 0.0.0.0/0(全开)。

3. 完成 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;
    }
}

2. 更新 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

3. 部署并验证

  1. 域名解析:在你的域名服务商处,将域名指向腾讯云服务器的公网 IP
  2. 重启服务
cd /opt/wordpress-app
docker compose up -d

访问域名看看效果

最后需要到wordpress后台设置里

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

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理