在Ubuntu 14.04上,我创build了一个可以手动启动和停止的非特权容器。
但我希望这个系统开始和停止。
我已经将以下内容添加到容器的configuration中: lxc.start.auto = 1 lxc.start.delay = 5
但是,系统脚本似乎没有select无特权的容器。
在linuxcontainers.org上有一个与此相关的线程 ,但该解决scheme似乎仅限于root用户。
有一个干净的方式来做这个非root用户(根用户的同意)?
我build议在Ubuntu的cron中使用方便的@reboot别名来运行lxc-autostart 。
作为拥有非特权容器的用户,运行crontab -e并添加以下行:
@reboot lxc-autostart
如果有人绊倒在这个答案自动启动非特权LXC容器的答案(我当然要回来这里很多),这里有一个解决scheme,运行良好,我遵循它来在我的服务器上工作:
Nicholas J Ingrassellino的http://blog.lifebloodnetworks.com/?p=2118 。
简而言之,它涉及创build两个脚本,它们在启动时一起工作,以允许LXC启动每个列出的用户的非特权容器,而不必实际login到用户帐户。 换句话说,作为用户使用所有CGroup魔术的命令执行命令是完好的。 按照最佳做法,我会在这里引用它的骨头,但值得一读他的原创文章。
允许我们的用户帐户使用桥…
echo "$USER veth lxcbr0 1024" | sudo tee -a /etc/lxc/lxc-usernet创buildUpstart脚本…在
/etc/init/lxc-unprivileged.conf添加…
description "LXC Unprivileged Containers" author "Mike Bernson <[email protected]>" start on started lxc script USERS="[user]" for u in $USERS; do cgm create all lxc$u cgm chown all lxc$u $(id -u $u) $(id -g $u) lxc-autostart -L -P /home/$u/.local/share/lxc | while read line; do set -- $line /usr/local/bin/startunprivlxc lxc$u $u $1 sleep $2 done done end script
确保用您的用户帐户replace[用户]。
创build容器启动脚本…在
/usr/local/bin/startunprivlxc添加…
#!/bin/sh cgm movepid all $1 $$ sudo -iH -u $2 -- lxc-start -n $3 -d
…并使其可执行…
sudo chmod +x /usr/local/bin/startunprivlxc
我只想强调一下,它似乎确实安全,正确地工作,并且不需要根用户通过SSH连接到其他用户帐户。
这里还有更多的关于这个主题(触及相关的陷阱): https : //gist.github.com/julianlam/4e2bd91d8dedee21ca6f这可以帮助理解为什么这是事实。
我已经写了一个小脚本来解决这个问题,只需按照评论说明。
SORRY:回答得太快了。 即使lxc-ls将“AUTOSTART”显示为“YES”,也不起作用。
这里有一个更有用的信息的链接,也许有人可以使用它: http : //www.geeklee.co.uk/unprivileged-privileged-containers-ubuntu-14-04-lxc/
我登陆这个页面,因为我有同样的问题。 在读完这个线程之后,我意识到如果lxc-create没有和sudo一起运行,它就不能写入通常的“/ var / lib / lxc /”目录。
我环顾四周,find“〜/ .local / share / lxc”中的无特权容器的rootfs,并将问题中的两行放入该目录的config中。
我查看了我使用的模板“lxc-download”,但是我认为在“lxc-download”被调用的时候,path被传入了。 我没有看过系统在启动过程中如何查找无特权的容器。
假设(这是所有方法的母亲搞砸了),你是作为“拥有”非特权lxc容器的用户login,然后下面的命令应该解决你在找什么…
$ echo "lxc-start -n LXC-CONTAINER-NAME -d" >> .bashrc
当你通过bashlogin时,这只会运行上面的命令。 这也是假设bash是loginshell。 请用您想要启动的LXC容器的名称replace名称: LXC-CONTAINER-NAME 。
我使用了不同的方法,它正在工作
1º在容器configuration文件中添加以下条目
lxc.start.auto = 1 lxc.start.delay = 5
2º在同一个服务器上创build容器用户和他自己之间的信任关系
userlxc @ GEST-4:〜$ ssh-keygen -t rsa生成公钥/私钥rsa密钥对。 input要保存密钥的文件(/home/userlxc/.ssh/id_rsa):input密码(空密码为空):再次input相同的密码:您的身份已保存在/home/userlxc/.ssh/id_rsa中。 您的公钥已保存在/home/userlxc/.ssh/id_rsa.pub。 密钥指纹是:c9:b4:e1:f3:bf:a3:25:cc:f8:bc:be:b6:80:39:59:98 userlxc @ GEST-AMENCIA-4密钥的randomart图像是:+ – [RSA 2048] —- + | | | | | o | | * + | | ES | | = * | | = o =。 | | 。 +,+。 | | oO = oo | + —————– +
userlxc @ GEST-4:〜$ cat .ssh / id_rsa.pub >> .ssh / authorized_keys userlxc @ GEST-4:〜$ ls -lrt .ssh / authorized_keys -rw-rw-r– 1 userlxc userlxc 404 Nov 19 17:23 .ssh / authorized_keys
检查SSH连接,你必须能够使用它没有密码userlxc @ GEST-4:〜$ ssh userlxc @ localhost“lxc-ls –fancy”
EXTLXCCONT01已停止 – – 是
UBUSER1404USERCONT01-STOPPED – – NO
UBUSER1404USERLXCCONT01已停止 – – 否
3º在容器所有者处创build一个crontab条目
@reboot ssh userlxc @ localhost“lxc-autostart”