Связь между контейнерами Docker на разных хостах в одной локальной сети

У меня есть два контейнера Docker, работающие на двух разных хостах:

  • компьютер A (ПК, использует Ethernet), ip 192.168.0.11 [ контейнер Docker запущен внутри на 172.17.0.2 ], OS Windows 7
  • компьютер B (ноутбук, использует WLAN), ip 192.168.0.12 [ докер контейнер работает внутри на 172.17.0.2 ], ОС Linux Ubuntu

Я хотел бы как-то соединить их, чтобы они могли общаться друг с другом (например по SSH).

Я попытался " связать" мои контейнеры, запустив их с:

docker run --name master_node --rm -it branislava/ubuntu1504java8:v1

docker run --rm -it --link master_node:master_node1 --name slave_node branislava/ubuntu1504java8:v1

Как было предложено в комментариях. Это работает; контейнеры могут обмениваться данными, но только когда они выполняются на том же хост-компьютере.

Как это можно сделать для контейнеров, работающих на разных машинах в одной локальной сети?

29
задан fixer1234
13.01.2023 22:03 Количество просмотров материала 2770
Распечатать страницу

4 ответа

показать нам команду docker.

думаю в вашей команде отсутствует ссылка

вот пример

docker run --name=redmine -it --rm --link=postgresql-redmine:postgresql \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  sameersbn/redmine:3.3.1
0
отвечен Eros 2023-01-15 05:51

Я никогда не пробовал, но так что вы можете выполнить другой ПК

docker run --name=Client -it --rm \
      --env='MEMCACHE_HOST=192.168.1.12' --env='MEMCACHE_PORT=22' \
0
отвечен Eros 2023-01-15 08:08

ниже приведен сценарий bash для установления связи между контейнерами docker одного образа на разных хостах в одной локальной сети:

 # Firstly, we have to make a swarm
 # We have to discover ip address of the swarm leader (i.e. manager, master node)
 ifconfig
 # My master computer has ip 192.168.0.12 in the local network
 sudo docker swarm init --advertise-addr 192.168.0.12
 # Info about swarm
 sudo docker info
 # info about nodes (currently only one)
 sudo docker node ls
 # hostaname got it name automatically, by the host's name

 # adding new nodes to the swarm
 # ssh to the slave node (i.e. worker node) or type physically:
 # this command was generated after 
 # sudo docker swarm init --advertise-addr 192.168.0.12
 # on manager computer
 docker swarm join --token SWMTKN-1-55b12pdctfnvr1wd4idsuzwx34vcjwv9589azdgi0srgr3626q-01zjw639dyoy1ccgpiwcouqlk  192.168.0.12:2377

 # if one cannot remember or find this command
 # should type again on the manager host
 docker swarm join-token worker

 # ssh to the manager or type in directly:
 # (listing existing nodes in a swarm)
 sudo docker node ls
 # adding docker image as a process that will run in this containers
 # ssh to the manager or type in directly:
 # replicas will be the number of nodes
 # manager is also a worker node
 sudo docker service create --replicas 2 --name master_node image-name sleep infinity
 # I have to enter inside of the containers and set up some things before
 # running application, so I say `sleep infinity`
 # Else, this is not necessary.

 # what's up with the running process
 sudo docker service inspect --pretty etdo0z8o8timbsdmn3qdv381i
 # or
 sudo docker service inspect master_node
 # also, but only from manager
 sudo docker service ps master_node
 # see running containers (from worker or from manager)
 sudo docker ps

#  promote node from worker to manager
# `default` is the name of my worker node
sudo docker node promote default
#  denote node from manager to worker
sudo docker node demote default

# entering container, if needed
# getting container id with `sudo docker ps`
sudo docker exec -it bb923e379cbd  bash

# retrieving ip and port of the container
# I need this since my containers are communicating via ssh
sudo docker ps
sudo docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 5395cdd22c44

# removing processes from all nodes
sudo docker service rm master_node
# this command should say `no process`
sudo docker service inspect master_node

надеюсь, кто-то найдет это полезным.

0
отвечен concrete_rose 2023-01-15 10:25

Я знаю, это старый пост.Если ssh на контейнерах настроен, и порт 22 открыт, необходимо выяснить сопоставленный порт для внешних соединений.Это не решение, но вы можете попробовать

выполнить эту команду на ноутбуке B

  docker port master_node1 22

если порт открыт, то он передаст вам некоторый номер порта другие велемудрые ошибки вне, например если выход вышеуказанной команды

          0.0.0.0:1234

ssh с ноутбука a в контейнер на ноутбуке B

      ssh username@192.168.0.12 -p 1234
0
отвечен Sam 2023-01-15 12:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

docker
linux
networking
ssh
wireless-networking
Вверх