我的 CentOS LXC 容器不再在 Ubuntu 14.10 机器上启动。我认为问题是在重新启动后开始的,但我不确定。
我在 yum 更新后遇到了类似的问题,当时 init 脚本被替换为不支持 LXC 的库存脚本。他们正在尝试启动 udev 等......但是这次我对所有 CentOS 实例都有这个问题,即使是那些新创建的实例。
主机操作系统:Ubuntu14.10 64 位
来宾操作系统:Centos 6.5 64 位
root@ubuntu-mvutcovici:~# lxc-start --logfile stash-lxc.log --logpriority DEBUG -dn stash
lxc-start: lxc_start.c: main: 337 The container failed to start.
lxc-start: lxc_start.c: main: 339 To get more details, run the container in foreground mode.
lxc-start: lxc_start.c: main: 341 Additional information can be obtained by setting the --logfile and --logpriority options.
root@ubuntu-mvutcovici:~#
Run Code Online (Sandbox Code Playgroud)
这是 stash-lxc.log 文件的内容:
lxc-start 1416596262.928 INFO lxc_start_ui …Run Code Online (Sandbox Code Playgroud) 我不是LXC专家,但据我所知,它与linux-vserver非常相似。
如果这是正确的,我想知道为什么在已经拥挤的虚拟化阵营中还有另一个玩家?LXC 提供(或承诺)什么是 linux-vserver 没有的?
我是 linux-vserver 的长期用户,我记得大约在很多年前,在所有这些虚拟化炒作之前。最近开发速度放缓,但从未完全停止 - 我知道是因为开发人员帮助我将其恢复到 linux/hppa 上的有用状态(至少在 Gentoo 中)。他们定期推出针对最新内核的补丁,使用所有最新的好东西(LXC 使用的相同容器基础架构),甚至与 GRsecurity 集成。
开始 LXC 工作的人可能有充分的理由这样做,而不是加入已经完善的 linux-vserver 基础?那我想知道。
这都是关于主线集成的吗?那么为什么不采用 linux-vserver 进行集成,就像 Xen 人对 XenLinux 所做的那样?
是否可以在较重的虚拟化(Xen DomU、KVM、Hyper-V、VMVare)下使用 LXC?我想将它用作安全(隔离)工具,限制资源消耗的能力对我来说不是优先事项。我只对是否可以以直接的方式完成感兴趣;类似于在非虚拟化服务器上使用 LXC。我不想在生产服务器上使用太复杂的设置。
我想使用 lxc-execute 隔离进程。是否可以设置带宽、CPU 和内存限制?
我查看了 lxc.conf 的人,但我没有发现它详尽无遗。
我有一个 LXC 容器 ( 10.0.3.2) 在主机上运行。服务正在容器内的端口上运行7000。
从主机 ( 10.0.3.1, lxcbr0),我可以访问服务:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
我想让外部世界可以访问在容器内运行的服务。因此,我想7002将主机上的端口转发到7000容器上的端口:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)
结果是 ( iptables -t nat -L):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)
尽管如此,我仍无法使用转发端口从主机访问该服务:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
我觉得我在这里错过了一些愚蠢的东西。我应该检查哪些事项?调试这些情况的好策略是什么?
为了完整起见,这里是如何iptables …
现在我正在使用 Linux VServer 进行 VPS 托管。但是它缺少一些我需要的功能(例如 cpu 使用虚拟化、来宾配额支持等),所以我正在考虑切换到 OpenVZ 或直接切换到 LXC。我在某处读到 LXC 尚未被认为是安全的(例如http://en.gentoo-wiki.com/wiki/LXC#MAJOR_Temporary_Problems_with_LXC_-_READ_THIS) - 这仍然是真的吗?因为我不认识经营客人的人,所以我真的必须照顾好安全。
更新:
我在那里找到了解决方案:http : //www.linuxfoundation.org/collaborate/workgroups/networking/bridge#No_traffic_gets_trough_.28except_ARP_and_STP.29
# cd /proc/sys/net/bridge
# ls
bridge-nf-call-arptables bridge-nf-call-iptables
bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged
# for f in bridge-nf-*; do echo 0 > $f; done
Run Code Online (Sandbox Code Playgroud)
但我想就此获得专家意见:禁用所有 bridge-nf-* 是否安全?他们来这里做什么?
更新结束
我需要将 LXC 容器桥接到主机的物理接口 (eth0),阅读有关该主题的大量教程、文档和博客文章。
我需要容器拥有自己的公共 IP(我以前做过 KVM/libvirt)。
经过两天的搜索和尝试,我仍然无法使其与 LXC 容器一起使用。
主机运行新安装的 Ubuntu Server Quantal (12.10),仅安装了 libvirt(我没有在此处使用)和 lxc。
我创建了容器:
lxc-create -t ubuntu -n mycontainerRun Code Online (Sandbox Code Playgroud)
所以他们也运行 Ubuntu 12.10。
/var/lib/lxc/mycontainer/config 的内容是:
lxc.utsname = mycontainer
lxc.mount = /var/lib/lxc/test/fstab
lxc.rootfs = /var/lib/lxc/test/rootfs
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.veth.pair = …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个系统,该系统将运行短期(CI 和测试版本)的软件组件,根据我的要求,每个组件都位于私人主机上是强制性的。我将这个定义也包含在半虚拟化选项中,因为它似乎可以让我省去很多麻烦。
我在 Mac 上工作,所以几乎所有技术都已淘汰,libvirt和quemu等对我不起作用。然而,我计划部署到 Debian;所以在 Debian 上运行的任何东西都回到了桌面上,前提是我可以编写主机及其来宾域的配置脚本。
我的预期设置是我可以用来引导 Debian 安装程序,这意味着在启动时,机器会自动配置(Chef、Puppet、Babushka,别介意,真的) - 并且该配置的一部分应该构建一个可用于启动容器的模板 rootfs。容器本身也需要进行配置,这样当容器上来的时候,知道要做什么工作,可以做工作,然后退出。
简而言之,这是我需要的工作流程:
我已经到了尝试以下的地步,并出于以下内联的原因放弃了它们:
对于主机
老实说,我不确定人们应该使用什么技术来将虚拟机从一无所有变成一个运行、工作和有用的系统。对我来说似乎是三个步骤 …
对于共享相同文件系统的容器,这是一项简单的任务,但我不确定使用 LVM 磁盘的容器的正确方法是什么。
我知道我可以使用rsync或scp,但我想知道是否有可能做到这一点,没有设置ssh/ ftp/http服务器。此外,能够在不修改容器配置的情况下传输文件会很好,因为它需要重新启动容器。避免永久挂载共享文件夹是个好主意,因为这可能会带来潜在的安全风险(应该可以使用简单的挂载/卸载选项)。
我想到的一个选项是在主机上使用 WebDAV 服务器并将其安装在容器中,但我还没有分析它,我不确定它可能带来的性能损失。我认为的其他选项是在主机上安装 LVM 分区,但我不确定这是否安全。
在我的配置中,我使用以下命令创建容器:
lxc-create -t ubuntu -n "${NAME}" -B lvm --vgname lxc-vg --fssize "${SIZE}"
Run Code Online (Sandbox Code Playgroud)
除了自动启动功能外,我使用的是默认配置,该功能是通过将以下几行添加到/var/lib/lxc/${NAME}/config文件中实现的:
lxc.start.auto = 1
lxc.start.delay = 0
Run Code Online (Sandbox Code Playgroud) lxc ×10
linux ×4
containers ×2
iptables ×2
bridge ×1
debian ×1
jail ×1
libvirt ×1
lvm ×1
networking ×1
openvz ×1
provisioning ×1
security ×1
ubuntu-14.10 ×1
xen ×1