2017-11-30 8 views
1

컨테이너 A의 스크립트 표준 출력을 컨테이너 B의 표준 입력으로 파이프 처리하고 컨테이너 B의 stdout을 컨테이너 C의 표준 입력으로 파이프 처리하고 싶습니다. 같은 일을하는 것이 가장 좋은 방법인지 알아라.하나의 도커 컨테이너의 stdout을 다른 도커 컨테이너의 stdin에 연결합니다.

옵션 1 개

docker run -it ImageA python script1.py | docker run -it ImageB python script2.py | \ 
docker run -it Image3 python script3.py 

옵션 2

후속 용기가 액세스 될 수있는 데이터를 저장하는 공유 볼륨을 사용한다.

docker run -it -v /home/shared_volume:/container1_home/shared_volume python script1.py 

docker run -it -v /home/shared_volume:/container2_home/shared_volume python script2.py 

docker run -it -v /home/shared_volume:/container3_home/shared_volume python script3.py 

이상적인 공유 볼륨을 사용하지 않는 것이 좋습니다. script1.py 및 script2.py의 출력은 수 테라 바이트 정도의 중간 파일 (또는 데이터 스트림)을 생성합니다. 나는이 파일들에 관심이 없다. disk3.py의 결과 만 디스크에 저장하는 것을 선호한다.

답변

0

-t 옵션없이 실행하여 동일하게 시도해 볼 수 있습니까? 아래처럼 샘플 1을 할 수 있었고 효과가 있습니다.

$docker run -i ubuntu:xenial ls -l | docker run -i ubuntu:xenial wc -l 
$20 
+0

고마워요. 나는 도커 컨테이너 사이의 배관이 내가 원하는 것을 할 것이라는 것을 알고있다. 스트리밍 할 데이터가 상당히 많거나 (~ TB) 데이터가 더 좋은 경우이 방법이 가장 좋은 방법이라고 생각하십니까? – Vishnu

+1

제 대답이 당신을 위해 일하고 두 번째 질문에 오기를 바랍니다. Kafka 또는 RabbitMQ Docker를 사용하고 프로듀서 (stdout) 및 구독자 (stdin)로 활동하도록 프로그램을 작성하는 것이 좋습니다. 이렇게하면 데이터를 가지고 놀고 싶을 때 디버깅하고 도커 사이에 어떤 일이 일어나는지 확인할 수 있습니다. 더욱이, 이런 종류의 접근법은 데이터를 볼륨에 저장하지 않거나 파이프 옵션을 사용하지 않을 경우에 유용합니다. – Viswesn

관련 문제