V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shelken
V2EX  ›  问与答

Docker 挂载父子目录问题

  •  
  •   shelken · 2022-07-23 12:18:34 +08:00 via iPhone · 902 次点击
    这是一个创建于 844 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例子:
    volume:
    - /volume1/data/a:/data/a
    - /volume1/data/c:/data/a/c

    我想知道,这种情况下,假如我的宿主机的 c 有一个文件 d ,那么我的 a 文件夹下会出现 c 文件夹且有 d 吗?会占用多空间吗? docker 是怎么处理这种文件关系的?拷贝?
    6 条回复    2022-07-23 22:01:27 +08:00
    Nitroethane
        1
    Nitroethane  
       2022-07-23 12:41:15 +08:00 via iPhone
    会有的。docker 是利用 Linux 的 mount 机制处理这些问题的,你把宿主机目录挂载到容器中,在容器中操作的时候就是操作的宿主机目录
    Nitroethane
        2
    Nitroethane  
       2022-07-23 12:44:46 +08:00 via iPhone
    docker 把宿主机目录挂载到容器中,没记错的话具体采用的是 bind mount 机制,所以不是拷贝,是对宿主机目录的引用,有点类似 c++ 中的引用
    shelken
        3
    shelken  
    OP
       2022-07-23 12:59:55 +08:00 via iPhone
    @Nitroethane 那如果我在宿主机的 a 目录下直接改了 d ,会修改到我 c 目录下的 d 吗?如果修改了,是怎样的一个修改?是直接改了 d ,还是通过 docker 改了 d ?
    Nitroethane
        4
    Nitroethane  
       2022-07-23 21:31:06 +08:00
    @shelken #3 会。这种修改机制是内核实现的,和你正常修改一个文件一样。不经过 docker
    Nitroethane
        5
    Nitroethane  
       2022-07-23 21:32:49 +08:00   ❤️ 1
    讲道理你完全可以做个实验亲自体会一下,顺便建议了解下 Linux 的联合文件系统( union filesystem )以及文件系统挂载机制( UNIX 环境高级编程或者 Unix/Linux 系统编程手册都讲得不错)。
    shelken
        6
    shelken  
    OP
       2022-07-23 22:01:27 +08:00 via iPhone
    @Nitroethane 嗯,十分感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5865 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:48 · PVG 10:48 · LAX 18:48 · JFK 21:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.