You need to enable JavaScript to run this app. Node 无法访问 WordPress Docker 容器 /var/www/html 目录该如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Node 无法访问 WordPress Docker 容器 /var/www/html 目录该如何解决

问题根因拆解
  • 跨容器文件完全隔离:wordpress_frontend_build Node构建服务和wordpress Web服务运行在独立的容器命名空间中,两个容器哪怕配置了完全相同的路径字符串(比如/var/www/html),也是各自独立的存储空间,不存在任何自动文件同步机制。你在Node容器内构建生成的所有文件,都只存在于Node容器自己的存储层,哪怕构建流程完全没有报错,这些文件也不会自动同步到WordPress容器,更不会被WordPress容器感知到,这就是你在WordPress容器内查不到public 目录的核心原因。
  • 配置认知误区:Node构建容器内设置的WORKDIR /var/www/html,只是在Node镜像内部创建了一个空的独立目录,既不属于WordPress容器的路径空间,也不会自动和WordPress容器的同路径目录打通。这种路径名的相似性不代表存储层的共享。
  • 原配置语法错误:提供的docker-compose.yml 存在结构缩进错误,所有服务配置没有嵌套在顶层的services 键下,会导致Compose解析异常。
  • 操作边界限制:Dockerfile中的COPY命令仅能操作镜像构建上下文(即../wordpress-custom 目录)内的本地文件,无法跨容器访问WordPress服务运行时的内部文件系统,不存在“访问另一个容器目录”的能力。
可落地的修复方案

核心逻辑:复用已配置的宿主机挂载卷,让Node构建服务直接读写和WordPress服务共享的同一份宿主机文件,从根源打通文件链路,不需要跨容器做文件访问。

第一步:修正docker-compose.yml结构

  1. 补全顶层services 节点结构,修正所有服务的嵌套缩进。
  2. 给Node构建服务挂载和WordPress服务完全相同的宿主机主题目录,让构建流程直接读写宿主机上的主题文件。
    修正后的参考配置:
version: "3.8"
services:
  mysql_wordpress:
    command: --default-authentication-plugin=mysql_native_password --sql_mode="NO_ENGINE_SUBSTITUTION"
    image: mysql:5.7.22
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "pass"
      MYSQL_DATABASE: "wordpress_db"
  wordpress:
    depends_on:
      - mysql_wordpress
      - wordpress_frontend_build
    image: wordpress:latest
    ports:
      - "3002:80"
    links:
      - mysql_wordpress:mysql
    env_file:
      - "../wordpress-custom/.env"
    volumes:
      - ../wordpress-custom/plugins:/var/www/html/wp-content/plugins/
      # 宿主机主题目录直接挂载到WordPress容器对应路径
      - ../wordpress-custom/my-custom-theme:/var/www/html/wp-content/themes/my-custom-theme
  wordpress_frontend_build:
    build: "../wordpress-custom"
    volumes:
      # 给构建服务挂载同一个宿主机主题目录,和WordPress共用文件
      - ../wordpress-custom/my-custom-theme:/app/my-custom-theme

第二步:修正Dockerfile的无效路径配置

去掉无意义的WORKDIR /var/www/html 伪路径配置,改用Node容器内正常的工作目录,避免和WordPress容器的路径产生认知混淆:
修正后的参考配置:

FROM node:14 AS builder
# 使用正常的构建工作目录,不再蹭WordPress容器的路径名
WORKDIR /app
COPY ["./my-custom-theme/src", "/app/my-custom-theme/src" ]
COPY [ "package*.json", "/app/" ]
COPY [ "webpack.config.js", "/app/" ]
RUN npm install
RUN npm run build && rm webpack.config.js
RUN npm prune --production

第三步:调整构建输出路径匹配

修改webpack.config.js 中的输出配置,把构建生成的public 目录直接输出到挂载卷对应的主题目录下,比如配置输出路径为/app/my-custom-theme/public——因为这个路径已经通过卷映射到宿主机的主题目录,WordPress服务已经挂载了同一个宿主机目录,构建完成后文件会自动同步到WordPress可读取的范围内。

常见避坑提示
  • 不要尝试在Node容器内通过路径名匹配WordPress容器的文件系统,所有跨容器的文件同步,都需要通过宿主机卷的中转实现。
  • 构建流程完成后如果不需要保留Node容器的运行进程,可以给构建服务配置一次性执行的命令,构建完成后自动退出,减少不必要的资源占用。
  • 排查文件是否存在时,优先查看宿主机上的对应挂载目录,不要只在容器内部做检查——如果构建产物没有落到宿主机目录,哪怕容器内部能查到,WordPress容器也读不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 14:54:05