对于共享相同文件系统的容器来说,这是一项简单的任务,但我不确定对于使用 LVM 磁盘的容器来说什么是正确的方法。
我知道我可以使用rsync
或scp
,但我想知道是否可以在不设置ssh
/ ftp
/http
服务器的情况下执行此操作。此外,如果能够在不修改容器配置的情况下传输文件就更好了,因为这需要重新启动容器。避免永久挂载共享文件夹是个好主意,因为这些文件夹可能会带来潜在的安全风险(应该提供简单的挂载/卸载选项)。
我想到的一个选项是在主机上使用 WebDAV 服务器并将其安装在容器中,但我还没有分析过它,也不确定它可能带来的性能损失。我想到的另一个选项是在主机上安装 LVM 分区,但我不确定这是否安全。
更新
在我的配置中,我使用以下命令创建容器:
lxc-create -t ubuntu -n "${NAME}" -B lvm --vgname lxc-vg --fssize "${SIZE}"
/var/lib/lxc/${NAME}/config
除了自动启动功能外,我使用默认配置,自动启动功能是通过在文件中添加以下行来实现的:
lxc.start.auto = 1
lxc.start.delay = 0
答案1
修改后的答案:LXC 容器与主机共享相同的内核,因此它们挂载的任何文件系统都应该可以从外部访问。
如果您cat /proc/mounts
在主机上执行此操作,您能看到容器文件系统吗?
如果您看到类似的一行/dev/mapper/... /var/lib/lxc/o1/rootfs ext4 ...
,那么您应该能够/var/lib/lxc/o1/rootfs
从主机访问,而无需任何其他命令。
答案2
我知道这是一个老问题,但对于那些最终在这里搜索如何在主机和容器之间复制文件的人来说,这可能会有所帮助。
要将文件“my-file”从容器“container-name”拉到当前文件夹,请使用:
lxc file pull container-name/any-path/my-file .
要推送“my-file”,请使用:
lxc file push my-file container-name/any-path/
要递归推送文件夹“my-dir”,请使用:
lxc file push -r my-dir container-name/any-path/
答案3
一种更好的、某种程度上内置的将数据从主机传输到 lxc-container 的方式是下面代码中的第 4 行:
1 $ mkdir /tmp/transferDir
2 $ cp <some files> /tmp/transferDir/<some files>
3 $ cd /tmp
4 $ tar -C transferDir -c . | lxc-attach -n <container_name> -- /bin/sh -c "tar -C /tmp/ -vx; chmod 1777 /tmp;"
5 $ rm -r /transferDir
这chmod 1777 /tmp
很重要,否则在复制该文件夹(容器/tmp)的权限后,您会遇到类似的问题这个频繁的关于 xyz-sql 服务器无法重新启动及其他问题。