IPC связь между контейнерами Docker

Возможно ли взаимодействие двух отдельных контейнеров Docker через сокет ZMQ IPC? Если да, то как этого достичь?

Например:

Docker Container # 1 выполняет приложение, которое создает сокет ZMQ Response и связывается с "ipc://tmp/service_name".

Docker Container # 2 выполняет приложение, которое создает сокет ZMQ-запроса и подключается к "ipc://tmp/service_name".

Следующие команды используются для запуска приложений в двух отдельных контейнерах 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). Однако я могу пропинговать контейнер 1 из контейнера 2 и пинговать контейнер 2 из контейнера 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

ОБНОВЛЕНИЕ: я могу обмениваться данными между двумя отдельными контейнерами Docker с помощью сокета ZMQ TCP, но все еще не могу обмениваться данными с помощью сокета IPC. Является ли это возможным?

2 ответа

Решение

Вы видели Shared Memory с контейнерами 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

У меня есть 3 контейнера, 2 контейнера обмениваются данными с другим контейнером, что сработало для меня:

      # container 1
docker run -it --ipc=shareable -v ///tmp --network=host --name node container1

# container 2
docker run -it --ipc=container:node --volumes-from node --network=host --name mdns container2

# container 3
docker run -it --ipc=container:node --volumes-from node --network=host --name connection container3

container1может получить pidпроцессов, запущенных в container2а также container3и, следовательно, получить данные из контейнеров.

Другие вопросы по тегам