使用docker-compose创建PrestaShop容器后本地与容器卷数据不同步
PrestaShop Docker卷挂载不同步问题解决方案
核心故障原因
你的docker-compose配置存在挂载顺序冲突,后声明的全局站点目录/var/www/html挂载,会直接覆盖先声明的模块子目录/var/www/html/modules/mymoduledir挂载,导致本地模块目录无法正常同步到容器中。
修复步骤
- 第一步:调整
web服务的volumes挂载顺序,覆盖范围大的父目录挂载放在前面,子目录挂载放在后面避免被覆盖,修正后的配置如下:
services: web: # 其余原有配置保持不变 volumes: # 先挂载全局站点目录 - .docker/web:/var/www/html # 后挂载模块子目录,覆盖全局挂载对应位置的内容 - .:/var/www/html/modules/mymoduledir # Do not forget to remove directory when removing containers with `docker-compose rm`
- 第二步:匹配本地目录与容器用户权限,PrestaShop容器默认使用
www-data用户(uid=33、gid=33)运行,本地挂载的模块目录需要匹配该用户权限避免读写异常:
在本地宿主机执行命令:sudo chown -R 33:33 ./(当前目录为你要挂载的模块源码目录)
注意不要在容器内部修改目录权限,bind挂载的权限与宿主机绑定,容器内修改会同步到本地,容易导致本地文件权限异常 - 第三步:清理旧数据重新启动容器:
- 执行
docker-compose down -v删除旧容器和关联的匿名卷 - 删除本地
.docker/web目录下的所有旧文件,避免旧缓存影响 - 执行
docker-compose up -d重新启动服务
- 执行
原操作无效的原因
你之前删除本地目录后可以正常安装模块,是因为第一次启动时容器内还未生成站点文件,模块挂载暂时生效;当站点文件写入到.docker/web目录后,全局挂载会覆盖子目录挂载,本地修改就无法同步到容器内生效。
内容的提问来源于stack exchange,提问作者maldarol
相关产品推荐
相关产品推荐

