Как получить доступ к контейнеру из другого, где оба работают на другой машине? - PullRequest
0 голосов
/ 09 января 2019

Я не очень разбираюсь в сетевых технологиях докера, где у меня есть 2 разных контейнера, в то время как они размещены на двух разных машинах. В этом сценарии у меня есть два Raspberry Pi , где один сервер , а другой клиент .

Оба используют протокол CoAP для обмена сообщениями. В любом случае, клиент требует ip сервера в качестве параметра для клиентского скрипта, например -

python src/client.py <server_ip> 

Я проверяю контейнер сервера и получаю приватный ip как -

172.18.0.2

Вот файлы для создания docker-сервера и клиента -

docker-compose.yml (сервер)

version: '3'

services:
  server:
    build: ./
    image: img_server:v1
    ports: 
      - 5683:5683/udp
    volumes: 
      - ./:/usr/app
    command: ["python", "src/server.py"]

docker-compose.yml (клиент)

version: '3'

services:
  client:
    build: ./
    image: img_client:v1
    environment:
      SERVER_IP: "127.0.0.1"
    ports: 
      - 61616:61616/udp
    volumes: 
      - ./:/usr/app
    command: ["sh", "-c", "python src/client.py $SERVER_IP"]

Я не могу установить соединение, так как контейнеры (сервер и клиент) работают на разных машинах.

Вопрос: Можно ли установить соединение между сервером и клиентом, если оба они размещены в отдельном демоне Docker (на отдельной машине)? Если так, то как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Есть 2 основных подхода к этому.

Первый - работайте так, как будто вы не используете докеризованные приложения. Откройте порты из файлов docker-compose и укажите ip / hostname ваших хостов компьютеров для подключения (обратите внимание - в этом случае вы не используете IP-адрес контейнера - после предоставления портов они становятся доступными с хостов).

Второй - рекомендуется - используйте докерскую сеть overlay для соединения всех ваших контейнеров. В отличие от режима bridge, overlay позволяет подключаться между различными демонами Docker. Этот способ лучше, поскольку он обеспечивает изоляцию ваших контейнеров от хост-машин. Оверлейная сеть требует от вас создания docker swarm и подключения к нему ваших контейнеров.

Быстрый человек: https://docs.docker.com/network/network-tutorial-overlay/#walkthrough

0 голосов
/ 09 января 2019

Это точно так же, как если бы службы не работали в Docker: настройте клиент с IP-адресом физического хоста, на котором запущена служба. (Убедитесь, что вы опубликовали соответствующие ports:, чтобы они были доступны.)

Вы никогда не должны docker inspect контейнер, чтобы найти его IP-адрес. Существует много распространенных ситуаций, включая эту, когда этот адрес совершенно бесполезен, и всегда есть лучший способ добраться до контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...