设想一个假设的shell,它在特设容器中启动所有命令,并根据每个命令的功能进行一些隔离和资源控制:
cat foo.txt | sed ... | xargs some-command例如,每个命令都有一些内存限制,没有网络或只读安装的文件系统(S)。
这样的shell是否有可能以透明的方式实现,从而使进程不知道每个进程在容器中运行,并且可以使用UNIX管道、发送信号等等?
发布于 2018-07-20 23:16:19
如果我明白你在问什么,我不明白为什么这是不可能的,只要管道的不同边界的容器适当地吸收STDIN并通过STDOUT发射所有的东西。
你基本上是在问这个:
$ cat.txt | | | ...这应该能行。
在这里,我有一个码头容器,它只会运行这个脚本:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28c19c338e6e sleeper "/tmp/run.sh" 6 days ago Up 4 minutes focused_lumiere里面的剧本:
$ docker exec -it 28c19c338e6e cat /tmp/run.sh
#!/bin/bash
while true; do sleep 30; done现在,如果我们要运行这样的命令:
$ docker exec -it 28c19c338e6e bash -c "echo hi" | \
docker exec -i 28c19c338e6e bash -c "grep hi"
hi
$如果我们去grep做其他的事情:
$ docker exec -it 28c19c338e6e bash -c "echo hi" | \
docker exec -i 28c19c338e6e bash -c "grep bye"
$这些docker命令中的每一个都在容器中运行各自的命令,但是它们通过STDIN/STDOUT传递输入/输出,其中包含我正在运行的Bash和管道。
https://unix.stackexchange.com/questions/457537
复制相似问题