我有兴趣在 lxc 容器内启动一个守护进程,并将其 stdin/stdout 作为从主机传递的套接字,inetd 样式。这可能吗?
问问题
1259 次
3 回答
1
inetd
是一个守护进程,它启动(非守护进程)程序,这些程序使用标准输入/标准输出来倾听/与你交谈
LXC实用程序lxc-start
并坚持关闭所有打开的lxc-execute
文件描述符(包括标准输入/标准输出),使它们对inetd
. 然而,他们最终会调用clone(2)
,您也可以像这样编写自己的 C 包装器:
#define STACKSIZE 409600
/* choose your favourite brand of isolationism below */
#define SPLENDID_ISOLATION (CLONE_NEWPID|CLONE_NEWNS|CLONE_NEWNET)
int exec_command(void* arg) {
/* don't close stdin/stdout here! */
execl("command", "command", arg, NULL);
return 1;
}
void main(int argc, char **argv) {
void *stack = malloc(STACKSIZE) + STACKSIZE - 1; /* grows downwards */
clone(&exec_command, stack, SIGCHLD|CLONE_VFORK|SPLENDID_ISOLATION, argv[1]);
wait(NULL);
}
然后可以在inetd
.
于 2013-07-25T07:17:16.753 回答
1
请注意,如果使用带有目录后备存储(因此使用 overlayfs)的 LXC“快照”克隆,则 Unix FIFO 管道当前已损坏。看:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1214500
于 2014-08-01T21:22:59.777 回答
1
我不认为LXC 有本机支持,但你总是可以在 xinetd 下运行你的 lxc 命令来获得你想要的。或者编写自己的服务器,在一侧与套接字对话,在另一侧与 LXC(通过 popen() 或其他方式)对话。
于 2013-07-25T03:52:43.470 回答