LXC在容器上运行命令

时间:2017-06-23 12:55:04

标签: lxc

有没有办法在主机上运行的所有LXC容器上运行命令,例如fdisk -l?

lxc-execute requires --name option

4 个答案:

答案 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;