我正在ubuntu 14.04上尝试lxc。为了管理几个lxc实例,我使用的是python3-lxc。 使用pyhthon3-lxc,我无法克隆现有容器:
>>> import lxc
>>> c = lxc.Container('vanilla')
>>> c.defined
True
>>> c2 = c.clone('vanilla_clone')
>>> c2.defined
False
相应地,/ var / lib / lxc中没有vanilla_clone的rootfs。 使用
$ lxc-clone vanilla vanilla_clone
工作正常。 (python3和lxc-clone都以sudo开头。) 这是python3_lxc中的错误还是限制,还是我错过了什么?
有感: 使用lxc.Container.create需要一个从现有对象克隆时不需要的模板。
答案 0 :(得分:1)
我有同样的问题,我发现当一个同名的容器已经存在或它认为它已经存在时就会发生这种情况! 所以你需要的是在开始克隆之前检查它。我是这样做的:
>>> import lxc
>>> c = lxc.Container('vanilla')
>>> c2 = lxc.Container('vanilla_clone')
>>> if not c2.defined:
... c2 = c.clone('vanilla_clone')
>>> c.defined
True
>>> c2.defined
True
我真的不知道为什么,但即使Stéphane Graber做同样的事情here。看看这部分:
# Create a base container (if missing) using an Ubuntu 14.04 image
base = lxc.Container("base")
if not base.defined:
base.create("download", lxc.LXC_CREATE_QUIET, {"dist": "ubuntu",
"release": "precise",
"arch": "i386"})
# Customize it a bit
base.start()
base.get_ips(timeout=30)
base.attach_wait(lxc.attach_run_command, ["apt-get", "update"])
base.attach_wait(lxc.attach_run_command, ["apt-get", "dist-upgrade", "-y"])
if not base.shutdown(30):
base.stop()
# Clone it as web (if not already existing)
web = lxc.Container("web")
if not web.defined:
# Clone base using an overlayfs overlay
web = base.clone("web", bdevtype="overlayfs",
flags=lxc.LXC_CLONE_SNAPSHOT)
# Install apache
web.start()
web.get_ips(timeout=30)
web.attach_wait(lxc.attach_run_command, ["apt-get", "update"])
web.attach_wait(lxc.attach_run_command, ["apt-get", "install",
"apache2", "-y"])
if not web.shutdown(30):
web.stop()