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

