2017-05-17 23 views
5

2つの別々のDockerコンテナがZMQ IPCソケット上で通信することは可能ですか?もしそうなら、これはどのように達成できますか?例えばDockerコンテナ間のIPC通信

ドッカーコンテナ#1はZMQレスポンスソケットを作成し、 ":// tmpに/ SERVICE_NAME IPC" にバインドするアプリケーションを実行します。

ドッカーコンテナ#2は、ZMQリクエストソケットを作成し、 "ipc:// tmp/service_name"に接続するアプリケーションを実行します。

次のコマンドは、2つの別々のドッキングウィンドウコンテナでアプリケーションを実行するために使用されています

// 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、およびping容器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ソケットを使用して2つの別々の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

これはうまくいきました!ありがとう@アンディ・シン – milenko

+1

私は実装が/ tmpを共有する必要があると思います。 '--ipc = host'は必要ありません。私はセキュリティ上の理由からホストの/ tmpもIPCも共有しません。 –

+0

合意@RicardoBranco。次のようにも動作します: 'docker run -it --name c1 -v/tmp container1 ドッカーrun -it --name c2 --ipc =コンテナ:c1 --volumes-from c1 container2' – milenko

関連する問題