有没有办法在主机上运行的所有LXC容器上运行命令,例如fdisk -l?
lxc-execute requires --name option
答案 0 :(得分:2)
以下命令将输出每个正在运行的容器的名称(以及唯一的名称),每行一个:
lxc ls volatile.last_state.power=RUNNING -c n --format csv
我们可以在bash for循环中使用它,如下所示:
for container in `lxc ls volatile.last_state.power=RUNNING -c n --format csv`; do lxc exec $container <command>; done
答案 1 :(得分:0)
您可以使用几行bash执行此操作,无需在主机上安装PHP。
<强> LXC1.0 强>
#!/bin/bash
for container in $(lxc-ls -1 --running); do
lxc-attach -n "$container" -- /bin/bash -c "fdisk -l"
done
<强> LXD / LXC2.0 + 强>
#!/bin/bash
for container in $(lxc list volatile.last_state.power=RUNNING -c n --format csv); do
lxc exec "$container" "fdisk -l"
done
答案 2 :(得分:0)
from pylxd import Client
import os
conn=Client()
def ExecuteCommandOn(command):
for i in conn.containers.all():
if i.status.upper()=="RUNNING":
query = "lxc exec %s -- %s" % (i.name,command)
os.system(query)
def main():
ExecuteCommandOn("uptime")
if __name__=="__main__":
main()
答案 3 :(得分:-1)
如果主机节点上有php解释器,则可以使用此代码段
#!/usr/bin/env php
<?php
if(!@is_executable('/usr/bin/lxc-attach'))
{
print "This host is probably not an LXC host.\n";
exit;
$ret=@exec('/usr/bin/lxc-ls');
$vzs=explode(' ',$ret);
exec('clear');
print "Executing \"".$argv[1]."\" command on all containers...\n";
sleep(1);
foreach($vzs as $k)
{
print "Executing \"".$argv[1]."\" command on $k...\n";
passthru('/usr/bin/lxc-attach -n '.$k.' -- '.$argv[1]);
echo PHP_EOL;
}
echo PHP_EOL;