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

Docker挂载主机目录到容器后文件消失的问题求助

解决思路

1. 排查composer install的执行逻辑

  • 检查composer脚本是否包含删除主机目录文件的操作,比如清理缓存、批量删除文件的rm -rf命令。因为挂载后容器内/opt/web-crm/public_html直接映射主机当前目录,容器内的任何删除/修改都会同步到主机。
  • 查看composer.json的scripts字段,确认有没有自定义的post-install钩子命令,这类命令可能在安装依赖时误删文件。
  • 手动进入容器执行composer install,实时观察主机目录的文件变化,定位具体是哪一步导致文件消失。

2. 验证Docker镜像的目录内容

  • 先取消挂载配置,启动容器后查看/opt/web-crm/public_html下的文件:
    docker exec web-app ls -la /opt/web-crm/public_html
    
  • 对比主机目录的内容,确认是否是挂载时主机目录覆盖了容器内原有文件(这种情况会让你误以为是文件消失)。

3. 排查Git仓库状态异常

  • 执行git status查看仓库状态,确认消失的文件是否是未提交的跟踪文件、或被.gitignore排除的文件。
  • 检查是否有git clean命令被误执行(可能在容器启动脚本或composer脚本中),该命令会删除未跟踪的文件,导致文件看起来“消失”。

4. 调整挂载方式降低风险

  • 开发环境下避免直接挂载整个主机目录到容器应用根目录,改为挂载特定目录,比如:
    volumes:
      - ./src:/opt/web-crm/public_html/src
      - ./composer.json:/opt/web-crm/public_html/composer.json
    
  • 或者先在Dockerfile中把代码复制到容器内,仅挂载需要热更新的目录(如./public),避免容器内操作影响主机所有文件。

5. 检查挂载权限问题

  • 查看容器内执行composer install的用户:
    docker exec web-app whoami
    
  • 对比主机目录的用户权限:
    ls -ld ./
    
  • 如果权限不匹配,可能导致容器创建的文件主机无法读取(看起来像消失),可以在Dockerfile中添加USER指令,指定和主机相同的UID/GID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:37:33