컨테이너는 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 셸과 파이프에 입력/출력을 전달합니다.

관련 정보