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

Drupal 10与Docker环境中代码修改不生效问题排查

问题分析与解决

核心问题

你的Drupal服务配置里,挂载的是**Docker命名卷drupal-data**到容器的/var/www/html目录:

volumes:
  - drupal-data:/var/www/html

这种情况下,容器首次启动时会把官方drupal:latest镜像内的默认代码复制到命名卷中,后续容器直接读取卷内内容运行。你本地修改的代码完全没有同步到容器的运行目录,所以修改后看不到任何变化,和Docker缓存无关。

解决方案

要实现本地代码修改实时同步到容器,需要把本地Drupal项目目录挂载到容器的/var/www/html,替换原来的命名卷配置:

步骤1:调整docker-compose.yml的Drupal服务volumes配置

假设你的Drupal代码存放在docker-compose.yml所在的当前目录,修改为:

services:
  drupal:
    # 其他配置保持不变
    volumes:
      - ./:/var/www/html  # 本地当前目录挂载到容器运行目录

如果代码在当前目录下的drupal子文件夹,就改成./drupal:/var/www/html。

步骤2:同步容器内现有代码(可选)

如果之前已经通过命名卷运行过Drupal,需要把容器内的现有代码(比如配置、自定义模块等)复制到本地目录,避免数据丢失:

# 查看运行的Drupal容器名
docker ps
# 复制容器内代码到本地当前目录
docker cp <你的drupal容器名>:/var/www/html ./

步骤3:调整本地代码权限(开发环境)

容器内Web服务默认以www-data用户运行,需要确保本地目录权限允许该用户读写:

chown -R www-data:www-data ./
# 开发环境也可以简化权限(生产环境不推荐)
chmod -R 777 ./

步骤4:重启服务

修改配置后重启容器,本地代码修改就会实时同步到容器内:

docker-compose down
docker-compose up -d

额外说明

如果后续不需要原来的命名卷,可以删除它清理空间:

docker volume rm <你的项目目录名>_drupal-data

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:27:42