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

Docker Compose挂载单文件覆盖context.xml,保留容器目录其他文件方法

Docker Compose挂载单个文件不覆盖目录其他文件的解决办法
  • 先把卷挂载语法改对:你当前配置里用空格分隔路径是错误的,Docker Compose要求宿主机和容器路径之间必须用**冒号(:)**分隔。正确的单个文件挂载配置应该是:

    volumes:
      - /tmp/project/context.xml:/opt/apache-tomcat/webapps/project/META-INF/context.xml
    
  • 为啥之前META-INF里的其他文件会消失?
    错误的空格语法会被Docker Compose解析成创建一个匿名卷(名称为/tmp/project/context.xml),并挂载到容器内的/opt/apache-tomcat/webapps/project/META-INF/context.xml路径。此时容器内原本的文件路径会被强制转为目录,直接覆盖掉META-INF原有的文件结构,最终导致其他文件丢失。

  • 正确配置的效果:
    采用冒号分隔的单个文件挂载方式,Docker只会将宿主机的context.xml替换容器内的同名文件,META-INF目录下的其他文件完全不受影响,正好满足你的需求。

  • 针对Compose 2.1版本的注意点:
    要确保宿主机的/tmp/project/context.xml文件提前存在,否则Docker会自动创建一个名为context.xml的目录,再次出现覆盖问题。如果需要动态生成该文件,可以在启动容器前用脚本创建,或者在Compose的command指令中添加文件检查的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:44:58