Docker Compose挂载排除target目录却在宿主机创建空目录的解决方法
解决Docker Compose挂载时宿主机生成空target目录的问题
你的配置里,先把宿主机../services/myApp绑定挂载到容器内/code/services/myApp,再用匿名卷挂载容器内的/code/services/myApp/target——这种方式之所以会在宿主机生成空target目录,是因为Docker启动容器时,会先在绑定挂载的宿主机目录下创建对应的子目录,再完成匿名卷的挂载。
要避免这个问题,有两种实用方案:
方案一:拆分绑定挂载(推荐)
不要直接挂载整个myApp目录,而是只挂载需要与宿主机同步的子目录,跳过target。比如myApp下有src、config等需要同步的目录,配置改成:
volumes: - ../services/myApp/src:/code/services/myApp/src - ../services/myApp/config:/code/services/myApp/config # 按需添加其他需要同步的子目录
这样容器内的target目录完全独立,不会在宿主机生成任何相关目录。
方案二:提前在镜像中创建target目录并设置权限
如果你必须挂载整个myApp目录,可以在构建镜像时,提前在/code/services/myApp下创建target目录,并设置好合适的权限(比如和宿主机myApp目录一致的用户组权限)。这样启动容器时,Docker不会在宿主机创建空的target目录,而是直接将匿名卷挂载到容器内已存在的target路径。
比如在Dockerfile中添加:
RUN mkdir -p /code/services/myApp/target && chown -R your_user:your_group /code/services/myApp/target
然后保持原有的compose配置即可。
内容的提问来源于stack exchange,提问作者Jevgeni Merezin
相关产品推荐
相关产品推荐

