2017-05-17 4 views
5

두 개의 개별 Docker 컨테이너가 ZMQ IPC 소켓을 통해 통신 할 수 있습니까? 그렇다면 어떻게이 일을 성취 할 수 있습니까? 예를 들어Docker 컨테이너 간의 IPC 통신

:

도커 컨테이너 1은 ZMQ 응답 소켓을 만들고 ": // tmp를/SERVICE_NAME IPC"에 결합하는 응용 프로그램을 실행합니다.

도커 컨테이너 # 2은 ZMQ 요청 소켓을 만들고 "ipc : // tmp/service_name"에 연결하는 응용 프로그램을 실행합니다.

다음 명령은 두 개의 고정 표시기 컨테이너에서 응용 프로그램을 실행하는 데 사용됩니다

// Run container #1 (binds to "ipc://tmp/service_name") 
docker run --name c1 -it container1 

// Run container #2 (connects to "ipc://tmp/service_name") 
docker run -it --link c1:container1 --name c2 container2 

컨테이너를 실행 한 후, 나는 ZMQ (IPC) 연결을 설정할 수 없습니다입니다. 그러나, 나는 용기에서 용기 2, 핑 컨테이너 2에서 용기 (1)를 ping 할 수 있어요 1. 나는 또한 --ipc 명령을 사용했지만, 그것은 도움이되지 않았다

:

// Run container #1 (binds to "ipc://tmp/service_name") 
docker run --name c1 --ipc=host -it container1 

// Run container #2 (connects to "ipc://tmp/service_name") 
docker run -it --link c1:container1 --ipc=container:c1 --name c2 container2 

UPDATE를 : ZMQ TCP 소켓을 사용하여 두 개의 별도 Docker 컨테이너간에 통신 할 수는 있지만 여전히 IPC 소켓을 사용하여 통신 할 수 없습니다. 가능한가?

+1

무엇을 스스로 조사 했습니까? 예를 들어 [this] (https://torusware.com/blog/2015/04/optimizing-communications-between-html/) 기사를 읽었습니까? –

+0

직접 해보고 오류가 무엇인지 다시보고 왜 우리가 실제로 도움이 될만한 것이 있습니까? –

+0

예, 나는 그 기사 @JeroenHeier를 읽었습니다. 나는 그것을 다시 읽고 나가 잃어버린 것이 있는지보기 위해 다시 시도 할 것입니다. – milenko

답변

2

Shared Memory with Docker containers (docker version 1.4.1)을 보셨습니까? IPC가 살고있는 볼륨을 공유하지 않으 셨고 --ipc host으로 설정하십시오. 귀하의 예를 들면 다음과 같습니다 :

# Container #1 
docker run -it --name c1 -v /tmp:/tmp --ipc=host container1 

# Container #2 
docker run -it --name c2 -v /tmp:/tmp --ipc=host container2 
+0

이 방법이 효과적이었습니다! @Andy Shinn에게 감사드립니다. – milenko

+1

구현에 공유 된/tmp가 필요합니다. '--ipc = host'는 필요 없습니다. 나는 보안상의 이유로 호스트의/tmp도 IPC도 공유하지 않을 것이다 ... –

+0

Agreed @RicardoBranco. 다음은 작동합니다 같아요 C1 그런 C1의 container2' – milenko