Dockerfile中的Docker VOLUME命令无法按预期工作

编码先生
FROM ubuntu:15.04
RUN mkdir -p /app/tina
RUN touch /app/tina/foo.txt
RUN echo "testing tina" > /app/tina/foo.txt
VOLUME /app/tina
CMD sh

根据Docker指南

该Dockerfile生成一个映像,该映像导致docker运行在/ app / tina上创建一个新的挂载点并将foo.txt文件复制到新创建的卷中

但是当我这样做

docker run --rm -it -v /tmp/foo:/app/tina imagename sh
ls /app/tina/

我在其中找不到foo.txt。

丹妮拉·基佛(Danila Kiver)

问题在于,使用方式将外部目录作为卷附加时,-v实际上会执行绑定安装:/tmp/foo目录已安装到/app/tina容器目录中。

在Linux中,当您挂载某些东西时,以前在挂载点(/app/tina在您的情况下)中看到的所有文件都变得不可见。所以,当你安装/tmp/foo(空目录)/app/tina(包含foo.txt),该foo.txt文件将成为无形的,你看到的内容,/tmp/foo/app/tina目录中,即没有什么

你可以保证你会看到foo.txt/app/tina的时候,你会卸载tmp/foo从中:

[email protected]:/# ls /app/tina
[email protected]:/# umount /app/tina
[email protected]:/# ls /app/tina
foo.txt

但是,这仅在特权(docker run --privileged)容器中有效(否则您将无法卸载/app/tina)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章