美文网首页
不同主机上容器之间通信 Docker + Swarm

不同主机上容器之间通信 Docker + Swarm

作者: GongZH丶 | 来源:发表于2019-04-09 15:08 被阅读0次

在单台主机上的不同容器之间可以通过 docker inspect 查看IP地址互相访问,因为这些容器都在Docker0网卡下。

不同主机之间运行的容器显然不可能之间互联的,在 https://docs.docker.com/network/network-tutorial-overlay/#use-an-overlay-network-for-standalone-containers
上找到了解决方法。

环境:

  1. Windows 10 专业版,开启hyper-v
  2. 在hyper-v中启动三台Ubuntu(ubuntu-18.04.2-desktop-amd64)的 虚拟机。
  3. 在三台虚拟机上都安装了Docker(Docker version 18.06.3-ce, build d7080c1)。

开始

ubuntu1: 172.17.123.212
ubuntu2: 172.17.123.213
ubuntu3: 172.17.123.211

  1. 在ubuntu1上,初始化docker swarm 集群。

//docker swarm init --advertise-addr=<IP-ADDRESS-OF-MANAGER>
docker swarm init    // initialize the swarm. If the host only has one network interface, the --advertise-addr flag is optional.

  1. 在ubuntu2和ubuntu3上,分别执行如下命令,加入集群。

docker swarm join --token SWMTKN-1-2st8r75yp64rcpt8gao7xetofhkqv7f7d1k5iz77ndubcstisn-1fuo8sthugzimukjeewqo08xf 172.17.123.212:2377

执行完后,此时,ubuntu1是manager节点,ubuntu2和ubuntu3是worker节点

3.在ubuntu1这个manager节点中,执行


docker node ls

可以看到


image.png

在任意节点执行

docker network ls

可以看到


image.png
  1. 在manager节点执行
docker network create -d overlay nginx-net

5.在manager节点执行

docker service create \
  --name my-nginx \
  --publish target=80,published=80 \
  --replicas=5 \
  --network nginx-net \
  nginx

这就在这个集群中运行了5个容器。可以分别在每个节点查看

在不同主机上的容器之间通信

  1. 初始化swarm集群
  2. 在manager节点创建一个overlay网络
  3. 在manager节点上创建一个容器,加入这个网络
  4. 在worker节点上创建一个容器,加入这个网络
  5. 这两个容器之间可以ping通
docker swarm init    //manager节点

docker swarm join --token <your_token> <your_ip_address>:2377  //worker节点

docker network create --driver=overlay --attachable test-net    //manager节点

docker run -it --name alpine1 --network test-net alpine   //manager节点

docker run -dit --name alpine2 --network test-net alpine   //worker节点

ping -c 2 alpine2   //manager节点

相关文章

网友评论

      本文标题:不同主机上容器之间通信 Docker + Swarm

      本文链接:https://www.haomeiwen.com/subject/jbbbiqtx.html