You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署WordPress时extensions/config卷为空问题求助

问题分析与解决方案

核心问题原因

Docker的**绑定挂载(主机目录挂载)**特性导致:当你把主机上的空目录挂载到容器内已有内容的路径时,容器内的路径会被主机空目录覆盖,变成空状态。而/var/www/html和/var/lib/mysql能正常被填充,是因为WordPress和MySQL镜像的启动脚本会在容器初始化时自动向这些路径写入初始化内容;但/usr/local/lib/php/extensions和/usr/local/etc/php/conf.d这两个路径,镜像本身有内容,但启动脚本不会主动重新生成或复制内容到挂载目录。

另外你在volumes区块声明了命名卷,但实际用的是主机目录挂载(./xxx:/path),所以这些命名卷定义并未生效。


解决方案1:手动复制容器内容到主机目录

  1. 临时移除compose.yaml中extensions和config的挂载配置,启动容器:

    # 临时修改后的wordpress服务volumes部分
    volumes:
      - ./wordpress:/var/www/html
      # 注释掉以下两行
      # - ./extensions:/usr/local/lib/php/extensions
      # - ./config:/usr/local/etc/php/conf.d
    

    执行启动命令:

    docker-compose up -d
    
  2. 用docker cp命令把容器内的对应目录内容复制到主机:

    # 复制PHP扩展目录内容
    docker cp artanetwork_wp:/usr/local/lib/php/extensions ./extensions
    # 复制PHP配置目录内容
    docker cp artanetwork_wp:/usr/local/etc/php/conf.d ./config
    
  3. 停止容器,恢复原来的挂载配置,重新启动:

    docker-compose down
    # 还原compose.yaml里的挂载配置
    docker-compose up -d
    

    此时主机目录已有内容,挂载后不会清空容器内的路径。


解决方案2:使用命名卷替代主机目录挂载(推荐)

命名卷在第一次使用时,会自动从镜像中复制对应路径的内容到卷里,不会出现覆盖清空的问题。修改compose.yaml的wordpress服务volumes部分:

services:
  wordpress:
    # 其他配置保持不变
    volumes:
      - ./wordpress:/var/www/html
      # 改用命名卷,对应volumes区块的定义
      - extensions:/usr/local/lib/php/extensions
      - config:/usr/local/etc/php/conf.d
    # 其他配置保持不变

volumes:
  wordpress:
  extensions:
  config:
  mysql:

修改后启动容器,命名卷会自动初始化容器内的初始内容,后续修改会持久化到卷中。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:35:21