web-dev-qa-db-ja.com

IPC Dockerコンテナ間の通信

2つの別個のDockerコンテナーがZMQ IPCソケットを介して通信することは可能ですか?もしそうなら、これはどのように達成できますか?

例えば:

Docker Container#1 ZMQ応答ソケットを作成して「ipc:// tmp/service_name」にバインドするアプリケーションを実行します。

Docker Container#2 ZMQリクエストソケットを作成して「ipc:// tmp/service_name」に接続するアプリケーションを実行します。

次のコマンドは、2つの別個のDockerコンテナーでアプリケーションを実行するために使用されます。

// 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からコンテナ1にpingを実行し、コンテナ1からコンテナ2にpingを実行できます。

--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

PDATE: ZMQ TCPソケットを使用して2つの個別のDockerコンテナ間で通信できますが、IPCソケットを使用して通信することはできません。出来ますか?

10
milenko

ご覧になりました Dockerコンテナー(dockerバージョン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
8
Andy Shinn