如何将卷添加到现有的Docker容器?

我有一个我创建的Docker容器,只需在Ubuntu上安装Docker并执行以下操作:

sudo docker run -i -t ubuntu /bin/bash

我立即开始安装Java和一些其他工具,花一些时间和它停止了容器

exit

然后,我想添加一个音量,并意识到这并不像我想象的那样简单。 如果我使用sudo docker -v /somedir run ...那么我最终会得到一个新的容器,所以我会安装Java并执行之前完成的工作,然后才能到达装入卷的容器。

所有关于从主机安装文件夹的文档似乎都暗示安装卷是创建容器时可以完成的事情。 因此,我必须避免从头开始重新配置新容器的唯一选择是将现有容器提交到存储库,并在安装卷时将其用作新容器的基础。

这确实是将卷添加到现有容器的唯一方法吗?


您可以提交现有的容器(即根据容器的更改创建新图像),然后使用新的坐标运行它。

例:

$ docker ps  -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS                          PORTS               NAMES
    5a8f89adeead        ubuntu:14.04          "/bin/bash"              About a minute ago   Exited (0) About a minute ago                       agitated_newton

$ docker commit 5a8f89adeead newimagename

$ docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 newimagename /bin/bash

如果一切正常,请停止旧容器,然后使用这个新容器。

而已 :)


我们没有任何方法可以在运行容器中添加卷,但要实现此目标,您可以使用以下命令:

复制容器和本地文件系统之间的文件/文件夹: -

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

供参考请参阅:

https://docs.docker.com/engine/reference/commandline/cp/


JérômePetazzoni有一篇非常有趣的博客文章,介绍如何在容器运行时将容器粘贴到容器上。 这不是Docker开箱即用的内容,但可以完成。

正如他也指出的那样

这不适用于不基于块设备的文件系统。

它只有在/ proc / mounts正确列出块设备节点(正如我们上面所看到的,它不一定是正确的)时才起作用。

另外,我只在我的本地环境中测试过这个; 我甚至没有尝试过一个云实例或类似的东西

因人而异

链接地址: http://www.djcxy.com/p/18261.html

上一篇: How can I add a volume to an existing Docker container?

下一篇: Docker Copying file from host to container