コンテナはPOSIXの親と子のプロセス関係に透過的ですか?

コンテナはPOSIXの親と子のプロセス関係に透過的ですか?

各コマンドの機能に基づいて、いくつかの分離およびリソース制御を使用して、一時コンテナですべてのコマンドを実行する仮想シェルを想像してください。

cat foo.txt | sed ... | xargs some-command

たとえば、各コマンドには、メモリ、ネットワークなし、または読み取り専用でマウントされたファイルシステムにいくつかの制限があります。

プロセスが各プロセスがコンテナで実行されていることを認識しておらず、UNIXパイプを使用してシグナルを送信できるように、これらのシェルを透明な方法で実装できますか?

答え1

質問を理解した場合、パイプのさまざまな境界にあるコンテナがSTDINを正しく受け取り、STDOUTを介してすべてをエクスポートする限り、これがなぜ不可能なのかはわかりません。

あなたは基本的にこれを尋ねています:

$ cat.txt | <container 1 app> | <container 2 app> | ...

これはうまくいきます。

はい

これには、このスクリプトを実行する以外に何もしないDockerコンテナがあります。

$ 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シェルとパイプに入出力を渡します。

関連情報