Comunicação entre contêineres do Docker em hosts diferentes na mesma rede local

0

Eu tenho dois contêineres do Docker em execução em dois hosts diferentes:

  • Computador A (PC, usa Ethernet), ip 192.168.0.11 [contêiner do Docker em execução no 172.17.0.2], sistema operacional Windows 7
  • Computador B (laptop, usa WLAN), ip 192.168.0.12 [contêiner do Docker em execução no 172.17.0.2], Ubuntu do OS Linux

Eu gostaria de conectá-los de alguma forma, para que eles pudessem se comunicar uns com os outros (por exemplo, via ssh).

Eu tentei "vincular" meus contêineres executando-os com:

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

Como sugerido nos comentários. Isso está funcionando; os contêineres podem se comunicar, mas apenas quando são executados na mesma máquina host.

Como isso pode ser feito para contêineres que estão sendo executados em máquinas diferentes na mesma rede local?

    
por concrete_rose 02.11.2016 / 13:42

4 respostas

0

A seguir, o script bash para estabelecer a comunicação entre contêineres docker da mesma imagem em diferentes hosts na mesma rede local:

 # 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

Espero que alguém ache isso útil.

    
por 21.11.2016 / 13:09
0

mostre-nos o comando do docker.

eu acho que no seu comando está faltando o link

aqui é um exemplo

docker run --name=redmine -it --rm --link=postgresql-redmine:postgresql \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  sameersbn/redmine:3.3.1
    
por 02.11.2016 / 13:53
0

Eu nunca tentei, mas você pode para realizar um outro pc

docker run --name=Client -it --rm \
      --env='MEMCACHE_HOST=192.168.1.12' --env='MEMCACHE_PORT=22' \
    
por 03.11.2016 / 10:37
0

Eu sei que isso é post antigo.Se o ssh em containers está configurado e a porta 22 está aberta, você precisa descobrir a porta mapeada para conexões externas.Esta não é uma solução, mas você pode experimentar

Execute este comando no laptop B

  docker port master_node1 22

se a porta estiver aberta, ela fornecerá a você algum número de porta, outros erros, por exemplo, se a saída do comando acima for

          0.0.0.0:1234

ssh do laptop A para o contêiner no laptop B

      ssh [email protected] -p 1234
    
por 18.06.2018 / 20:53