已经启动的 Docker 容器如何挂载目录?
在系统是 CentOS6.7 的阿里云 ECS 里,有一个已在运行的 Docker 容器,想在容器里挂载一个宿主的本地目录,这样某些容器里输出的文件,就可以在本地目录中打开访问了。请问如何挂载呢?
但是搜了一圈发现这个问题很少人问,难道是我问的方式不对吗,还是大家都是有别的办法实现?大胆想象一下可能别人是停掉容器然后重新 docker run -v *** 再恢复数据?
看来 Docker 容器已经在跑了,要挂载一个新目录是一件很麻烦的事情?我找了很久,只搜到一条答案:http://dockerone.com/article/149 ,而且跟着步骤做到【找到文件系统的设备(和sub-root)】这一步,我 $DEV 和 $SUBROOT 的输出是 rootfs 和 / ,跟文中完全不一样。
请问我可以怎么做呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这里讨论是说,没有人会做这件事。
你可以用
docker cp
把运行中的容器中的文件拷贝出来,停掉,再用docker run -v
挂上你想要的卷。不用过度纠结,docker官方并没有提供给你运行容器修改/添加挂载配置的操作。参照
Yujiaao 的方法,是相对最简单的实用的。PS:旧的容器容器停止后,可以不急着删除,如果文件遗漏还可以重新拷贝,或在在异常时,重新启动,恢复运行
你可以通过修改 docker 的源码来实现。
可以通过在容器内创建磁盘设备文件,然后把整个分区挂载进容器。
先看宿主的块设备:
记下要挂载的分区的设备号(例如/的
259:3
)。分区都挂载进去了,干啥都行了~
弄完才发现和题主发的文章大同小异:-|
说个与 docker 无关的方法:
sshfs 可以透过 ssh 连接挂载文件系统。在容器里装一个可以通过 ssh 把宿主的目录挂进来。
docker exec
新开一个 shell 搞这事就可以。这样目录里的内容存在容器外。如果容器暴露了 ssh 端口,也可以在外面用 sshfs 把里面的目录挂出来。这样文件夹里的内容实际在容器里。容器没了就没了。
通过 ssh 不只可以挂宿主机的目录,有 ssh 连接哪里的目录都可以挂。
docker默认没提供这个功能.
但是可以先把容器停掉, 用docker commit 创建一个新的image, 然后在运行新的image时挂载.