我已经在Ubuntu 14.04上进行了LXC / LXD的实验,并且运行良好。我只需要弄清楚如何使共享目录在主机和容器之间工作,就可以一劳永逸地抛弃Virtualbox。
我已经看到此页面:https : //wiki.gentoo.org/wiki/LXD
其中提供了说明,但我一直在出错。
有谁知道任何简单明了的指令来使它工作?任何帮助,不胜感激。
lxc file
到主机和容器,使用之间传输文件push
和pull
。
我已经在Ubuntu 14.04上进行了LXC / LXD的实验,并且运行良好。我只需要弄清楚如何使共享目录在主机和容器之间工作,就可以一劳永逸地抛弃Virtualbox。
我已经看到此页面:https : //wiki.gentoo.org/wiki/LXD
其中提供了说明,但我一直在出错。
有谁知道任何简单明了的指令来使它工作?任何帮助,不胜感激。
lxc file
到主机和容器,使用之间传输文件push
和pull
。
Answers:
您提到的https://wiki.gentoo.org/wiki/LXD上的说明是正确的,但可能需要更多说明。
首先在主机上检查存储容器数据的目录的所有权。跑
sudo ls -l /var/lib/lxd/containers
并检查您要与之共享目录的容器的所有者。以我为例uid
,gid
两者均为100000。
接下来,使用以下命令更改您要共享的目录的所有权:
sudo chown 100000:100000 /tmp/share_on_host
以您在注释中指示的方式与容器共享目录:
lxc config device add mycontainer sharedtmp disk \
path=/tmp/share_on_guest source=/tmp/share_on_host
现在,在容器中,您将看到目录/tmp/share_on_guest
(我不建议挂载目录,/tmp
因为该目录被系统用于其他内容并且具有特殊权限)归根目录所有。从这里开始,您可以使用chown
在容器中以将所有权更改为适当的所有权,uid
并gid
适合您在容器中的用户。
附带说明一下,将容器中的所有权更改为例如拥有uid
33 个用户的所有权后,您将在主机上看到uid
现在有100033个,这很有意义。
/var/lib/lxd/containers
指向其中的符号链接外,我什么都没有找到/var/lib/lxd/storage-pools/lxd/containers
(在本例中,最后lxd
一位是我的ZFS存储池的名称)。那里的所有容器在运行时似乎都具有相同的165536 uid / gid,root:root
在关闭时则归所有者所有。
lxc config
它就像一个魅力!
这是此问题的更新答案。
/var/www
如/var/test
在容器中那样安装主机文件夹。
lxc config device add mycontainer vartest disk source=/var/www path=/var/test
您可以将其他设备分配给容器,这些设备可以是主机可访问的文件夹。
$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
Add a device to a container.
...
注意 <device>
只是您分配的任意名称,它将用作后续设备管理的ID。
例如,要将主机文件夹“ ./host”挂载为容器中的“ / mnt / host” ...
lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host
仍然存在一个问题 -如果您希望主机和容器都可以写入此文件夹,则需要相应地配置所有权和权限。LXD的默认模式使用户和组id
值的数字范围虚拟化,这使情况变得复杂。 但是,有一个简单的解决方案:通过将容器配置为以主机等效的特权运行来绕过此虚拟化...
lxc config set <container> security.privileged true
目前,我尚不清楚这种方法对主机安全性的影响,但是虚拟化似乎在某种程度上“包含”了它。实际风险取决于使用容器的方式和原因。请参见https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers中的技术说明
进一步注意,如果您通常以非root用户身份在容器中操作,例如与...附加在一起,则此方法可能最有效。
lxc exec zesty -- su --login ubuntu
env
尤其是http_proxy
。解决方法示例:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
。
sudo dhclient
在容器中-或更改manual
为dhcp
in 50-cloud-init.cfg
。不错的线索在这里:github.com/lxc/lxd/issues/1298
基于ph0t0nix的出色回答,我为Ubuntu 18.04服务器提出了以下分步方法:
在主机中,确定rootfs所有者的UID:
sudo ls -l /var/lib/lxd/storage-pools/lxd/containers/webserver/rootfs
id -u root → 100000
在容器中确定ubuntu的UID(即容器中的用户):
id -u ubuntu → 1000
在主机中创建共享文件夹并将其添加到容器中:
lxc config device add webserver mydevicename disk path=/home/share_on_guest source=/home/share_on_host
调整共享文件夹的主机UID(UID = UID主机+ UID来宾):
sudo chown 101000:101000 /home/share_on_host
来宾(用户ubuntu)现在可以访问共享文件夹,并且可以使用来在容器内调整对共享文件夹的访问chmod
。
现在,我有了使用LXD配置文件处理容器和主机上的UID和GID之间的映射的安全,有效的解决方案。
在这里可以找到一个非常有用的要点:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
0777
没有明显原因的“请破解我的系统和销毁我的数据”权限!几乎没有理由这么做,因为可以通过更明智的修改(例如更改(组)所有权)来避免这种情况。-1
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
。但是,查看容器上的目录,将其中文件的所有者和组设置为“ nobody”和“ nogroup”,并且装载是只读的。