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

