V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
weishimi
V2EX  ›  Docker

Docker 中指定位置挂载数据,不能从容器中复制文件吗?

  •  1
     
  •   weishimi · Aug 18, 2017 · 6651 views
    This topic created in 3182 days ago, the information mentioned may be changed or developed.

    例如:挂个空目录进去,容器里对应目录里的文件就没了

    除了不指定目录,除了单独弄个数据卷

    只能用 Shell 弄个判断流程么,目录为空则自动写入文件;还是 Docker 有啥设置可以

    19 replies    2020-04-02 20:36:28 +08:00
    whileFalse
        1
    whileFalse  
       Aug 18, 2017
    不能,会覆盖容器镜像里面的目录。

    你的需求和场景是什么。
    strahe
        2
    strahe  
       Aug 18, 2017
    Linux 基本功复习一下,能把一个盘挂载到非空目录么
    blanu
        3
    blanu  
       Aug 18, 2017 via iPhone
    我一开始也很疑惑,不过后来看到很多 shell 脚本处理这个,就感觉这个应该是从技术层面没办法实现
    weishimi
        4
    weishimi  
    OP
       Aug 18, 2017
    @whileFalse 需求是本地指定目录要直接有些初始文件,看来要不先在本地拷贝文件,然后再挂载,或者容器启动弄个脚本远程添加。
    weishimi
        5
    weishimi  
    OP
       Aug 18, 2017
    @strahe 这是 Docker,既然不能那能用其他方法实现,我问的在于 Docker 是否内置这个其他方法
    maninwa
        6
    maninwa  
       Aug 18, 2017 via Android
    @strahe 记得可以挂载到非空目录的呀,有次迁移存储还专门把备份放到挂载目录下(卸载后),迁移完成后又直接挂载回来
    zuolan
        7
    zuolan  
       Aug 18, 2017
    docker cp 复制出来再执行咯,不过既然你都打算挂载了,那就是数据卷了,既然是数据卷,那镜像里面这个目录干嘛还要放东西。。。。把你的场景说出来看看?
    weishimi
        8
    weishimi  
    OP
       Aug 18, 2017
    @blanu 看来只能这么来了,文件小点还好,多了就麻烦;唔,我去 WordPress 的 Docker 脚本
    weishimi
        9
    weishimi  
    OP
       Aug 18, 2017
    @zuolan 场景,唔,一个倒好解决,批量的话…… 额,算了,直接弄个 Shell 脚本交工得了
    ntdll
        10
    ntdll  
       Aug 18, 2017   ❤️ 2
    同意#7 的说法,建议描述一下具体的需求场景,而不是提一个 XY 问题。

    http://coolshell.cn/articles/10804.html

    对于 X-Y Problem 的意思如下:

    1 )有人想解决问题 X
    2 )他觉得 Y 可能是解决 X 问题的方法
    3 )但是他不知道 Y 应该怎么做
    4 )于是他去问别人 Y 应该怎么做?

    简而言之,没有去问怎么解决问题 X,而是去问解决方案 Y 应该怎么去实现和操作。于是乎:

    1 )热心的人们帮助并告诉这个人 Y 应该怎么搞,但是大家都觉得 Y 这个方案有点怪异。
    2 )在经过大量地讨论和浪费了大量的时间后,热心的人终于明白了原始的问题 X 是怎么一回事。
    3 )于是大家都发现,Y 根本就不是用来解决 X 的合适的方案。

    X-Y Problem 最大的严重的问题就是:在一个根本错误的方向上浪费他人大量的时间和精力!
    ryd994
        11
    ryd994  
       Aug 18, 2017 via Android
    一般是通过启动脚本来做这个
    kaneg
        12
    kaneg  
       Aug 18, 2017 via iPhone
    说了半天不知道楼主的原始需求是啥
    zoues
        13
    zoues  
       Aug 18, 2017 via iPhone
    可以啊
    leopku
        14
    leopku  
       Aug 19, 2017 via iPhone
    1. 挂载文件
    2. 挂载到另外一个目录,拷贝或 sync 过去
    weishimi
        15
    weishimi  
    OP
       Aug 19, 2017
    我也是服了,很多说原始需求、使用场景的,还拷贝个 X-Y Problem,有这个时间请看一下我发的 3 行。

    标题:Docker 中指定位置挂载数据,不能从容器中复制文件吗?
    说明:-v $PWD/data:/docker,有没有什么设置能够容器内 /docker 拷贝到$PWD/data,而不是以下第一行实际碰到的覆盖。我显然要是的是容器内 /docker 拷贝到宿主机$PWD/data 目录

    第一行:例如:挂个空目录进去,容器里对应目录里的文件就没了
    说明:-v $PWD/data:/docker,$PWD/data 文件覆盖了容器内 /docker 文件

    第二行:除了不指定目录,除了单独弄个数据卷
    -v /data,容器内 /data 文件拷贝到宿主机(随机目录);-v volume-name:/data,容器内 /data 文件拷贝到数据卷 volume-name

    第三行:只能用 Shell 弄个判断流程么,目录为空则自动写入文件;还是 Docker 有啥设置可以
    说明 1:我知道有个解决方法,先-v $PWD/data:/docker,再判断 /docker 是否为空目录,目录为空则放入文件。这么做容器启动的时候,文件从远程添加,文件过大的话脚本执行需要花费不少时间,这显然不好。
    说明 2:数据同步有多种规则,目录$PWD/data,容器内 /docker 是否也有这多种规则?

    能有多详细我就说的多详细了。

    > 没有筷子我能用筷子吃饭吗?
    1. 不用筷子怎么吃饭
    2. 除了用手抓吃饭,除了用勺子吃饭
    3. 我另外找个筷子可以的,还有其他方法吗?

    为啥有人要问我,你吃的什么饭,你喜欢什么样的吃饭方式,你为什么要吃饭
    ypcs03
        16
    ypcs03  
       Sep 17, 2017 via Android
    如果挂载路径存在 docker 会先把里面的内容 copy 到这个目录下面再挂载,但是在 host 上不可见,可以在容器内加个 command copy 出来
    clearT
        17
    clearT  
       Feb 26, 2019
    liu826250634
        18
    liu826250634  
       Mar 18, 2020
    @weishimi 你这个问题解决了么,我刚学了两天 docker, 也遇到这种问题了,感觉 docker 的作者不会没想到这点。。。
    weishimi
        19
    weishimi  
    OP
       Apr 2, 2020
    @liu826250634 好久没这样折腾了,你参考下 17 楼回复的:
    https://stackoverflow.com/questions/49633701/docker-volume-empty-after-its-created/49635340#49635340

    很多天前就已经看到了,但那时候回复,提示要验证手机号码,就没回复了。现在到这里有别的疑惑,于是,回复…
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 18:09 · PVG 02:09 · LAX 11:09 · JFK 14:09
    ♥ Do have faith in what you're doing.