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

Windows11下Docker代码修改不自动同步问题求助

解决Docker容器与本地代码自动同步问题

问题根源

你的核心问题出在web服务的卷配置上:当前用的是命名卷drupal-data挂载/var/www/html,容器启动后,这个命名卷会覆盖镜像构建时COPY进去的代码目录。而且你没有把本地代码目录绑定挂载到容器内,所以本地修改的代码根本不会同步到容器里,只能靠重新构建镜像来更新。

解决方案

1. 修改docker-compose.yml的卷配置

把web服务里的命名卷替换成本地代码目录的绑定挂载,这样本地代码变更会实时同步到容器中。修改后的web服务volumes部分如下:

services:
  web:
    # 其他配置保持不变
    volumes:
      # 替换原有的 drupal-data:/var/www/html
      - ./:/var/www/html:delegated
  • ./代表当前docker-compose.yml所在的本地目录,会绑定到容器的/var/www/html路径
  • :delegated是Windows下的性能优化选项,让Docker优先使用本地文件系统缓存,提升同步速度

2. 调整Dockerfile适配开发环境

因为现在用绑定挂载同步代码,构建镜像时不需要再把本地代码COPY进去,否则会和绑定挂载冲突。修改Dockerfile:

  • 注释掉COPY --chown=www-data:www-data . /var/www/html这一行
  • 开发环境下,composer install可以在本地执行,或者启动容器后进入容器运行:
    docker compose exec web composer install
    

3. 处理Windows环境的额外注意事项

  • 如果你的Docker用的是WSL2后端,把代码放在WSL的文件系统里(比如/home/你的用户名/项目目录),不要放在Windows的C/D盘,否则同步速度会很慢,甚至出现延迟
  • 确保容器内www-data用户对代码目录有读写权限,可进入容器执行:
    docker compose exec web chown -R www-data:www-data /var/www/html
    

4. 解决Drupal缓存问题

修改代码后,Drupal可能因为缓存未更新导致看不到变化,需要手动清除缓存:

docker compose exec web drush cr

如果没装drush,也可以访问Drupal后台的配置页面手动清除缓存。

验证效果

修改配置后,执行docker compose up -d --build重启容器,之后修改本地代码,就能实时同步到容器中,无需重新构建镜像和删除容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:45:46