我想将USB驱动器安装到正在运行的docker实例中,以手动备份某些文件。
我知道format.parse(d)
的{{1}}功能,但这会创建一个新的容器。
注意:它是nextcloudpi容器。
答案 0 :(得分:1)
您只能在容器启动后更改a very limited set of container options。环境变量和容器安装之类的选项只能在初始docker run
或docker 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