shelken
V2EX  ›  问与答

Docker 挂载父子目录问题

  •  
  •   shelken · Jul 23, 2022 via iPhone · 1298 views
    This topic created in 1401 days ago, the information mentioned may be changed or developed.
    例子:
    volume:
    - /volume1/data/a:/data/a
    - /volume1/data/c:/data/a/c

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