如何将主机目录挂载到正在运行的Docker容器中

时间:2019-05-19 14:58:41

标签: linux docker mount

我想将USB驱动器安装到正在运行的docker实例中,以手动备份某些文件。

我知道format.parse(d)的{​​{1}}功能,但这会创建一个新的容器。 注意:它是nextcloudpi容器。

3 个答案:

答案 0 :(得分:1)

您只能在容器启动后更改a very limited set of container options。环境变量和容器安装之类的选项只能在初始docker rundocker create期间设置。如果要更改它们,则需要停止并删除现有容器,并使用新的挂载选项创建一个新容器。

如果您认为需要保留或备份数据,则无论如何它应该存在于某种卷装载中。删除并重新启动容器,并使用-v选项将卷安装在保留数据的位置。 Docker文档中有一个使用named volumes with separate backup and restore containers的示例;或者,您可以直接在其中使用主机目录和常规备份解决方案。 (如我在第一段中建议的那样,删除和重新创建容器是非常常规的操作,这不应涉及显式的“备份”和“还原”步骤。)

如果您现在拥有无法承受的丢失数据,则可以在建立更可靠的存储方案之前将docker cp从容器中取出。

答案 1 :(得分:1)

David Maze所述,几乎不可能通过使用常规docker命令更改现有容器的卷位置。

我找到了一种对我有用的替代方法。 主要思想是将现有容器转换为新的Docker映像,并在其之上初始化一个新的Docker容器。希望也对你有用。

// Create a new image from the container
docker commit CONTAINERID NEWIMAGENAME

// Create a new container on the top of the new image
docker run -v HOSTLOCATION:CONTAINERLOCATION NEWIMAGENAME

答案 2 :(得分:0)

我知道这个问题是从5月开始的,但对于将来的搜索者:

在主机文件系统上创建安装点:

sudo mkdir /mnt/usb-drive

使用--mount选项运行docker容器,并将“绑定传播”设置为“共享”:

docker run --name mynextcloudpi -it --mount type=bind,source=/mnt/usb-drive,target=/mnt/disk,bind-propagation=shared nextcloudpi

现在,您可以将USB驱动器安装到/mnt/usb-drive目录,它将被安装到运行容器内的/mnt/disk位置。

例如:sudo mount /dev/sda1 /mnt/usb-drive

当然,请更改/ dev / sda1。

有关绑定传播的更多信息:https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation