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
相关产品推荐
相关产品推荐

