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

2017-08-18 16:14:26 +08:00
 weishimi

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

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

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

5525 次点击
所在节点    Docker
19 条回复
whileFalse
2017-08-18 16:19:17 +08:00
不能,会覆盖容器镜像里面的目录。

你的需求和场景是什么。
strahe
2017-08-18 16:40:49 +08:00
Linux 基本功复习一下,能把一个盘挂载到非空目录么
blanu
2017-08-18 16:42:55 +08:00
我一开始也很疑惑,不过后来看到很多 shell 脚本处理这个,就感觉这个应该是从技术层面没办法实现
weishimi
2017-08-18 16:45:37 +08:00
@whileFalse 需求是本地指定目录要直接有些初始文件,看来要不先在本地拷贝文件,然后再挂载,或者容器启动弄个脚本远程添加。
weishimi
2017-08-18 16:48:12 +08:00
@strahe 这是 Docker,既然不能那能用其他方法实现,我问的在于 Docker 是否内置这个其他方法
maninwa
2017-08-18 16:49:10 +08:00
@strahe 记得可以挂载到非空目录的呀,有次迁移存储还专门把备份放到挂载目录下(卸载后),迁移完成后又直接挂载回来
zuolan
2017-08-18 16:49:16 +08:00
docker cp 复制出来再执行咯,不过既然你都打算挂载了,那就是数据卷了,既然是数据卷,那镜像里面这个目录干嘛还要放东西。。。。把你的场景说出来看看?
weishimi
2017-08-18 16:49:44 +08:00
@blanu 看来只能这么来了,文件小点还好,多了就麻烦;唔,我去 WordPress 的 Docker 脚本
weishimi
2017-08-18 16:57:26 +08:00
@zuolan 场景,唔,一个倒好解决,批量的话…… 额,算了,直接弄个 Shell 脚本交工得了
gam2046
2017-08-18 17:37:11 +08:00
同意#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
2017-08-18 18:29:10 +08:00
一般是通过启动脚本来做这个
kaneg
2017-08-18 20:07:28 +08:00
说了半天不知道楼主的原始需求是啥
zoues
2017-08-18 20:48:47 +08:00
可以啊
leopku
2017-08-19 08:51:31 +08:00
1. 挂载文件
2. 挂载到另外一个目录,拷贝或 sync 过去
weishimi
2017-08-19 18:36:27 +08:00
我也是服了,很多说原始需求、使用场景的,还拷贝个 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
2017-09-17 04:43:11 +08:00
如果挂载路径存在 docker 会先把里面的内容 copy 到这个目录下面再挂载,但是在 host 上不可见,可以在容器内加个 command copy 出来
clearT
2019-02-26 19:17:13 +08:00
liu826250634
2020-03-18 10:21:32 +08:00
@weishimi 你这个问题解决了么,我刚学了两天 docker, 也遇到这种问题了,感觉 docker 的作者不会没想到这点。。。
weishimi
2020-04-02 20:36:28 +08:00
@liu826250634 好久没这样折腾了,你参考下 17 楼回复的:
https://stackoverflow.com/questions/49633701/docker-volume-empty-after-its-created/49635340#49635340

很多天前就已经看到了,但那时候回复,提示要验证手机号码,就没回复了。现在到这里有别的疑惑,于是,回复…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX