在单台主机上的不同容器之间可以通过 docker inspect 查看IP地址互相访问,因为这些容器都在Docker0网卡下。
不同主机之间运行的容器显然不可能之间互联的,在 https://docs.docker.com/network/network-tutorial-overlay/#use-an-overlay-network-for-standalone-containers
上找到了解决方法。
环境:
- Windows 10 专业版,开启hyper-v
- 在hyper-v中启动三台Ubuntu(ubuntu-18.04.2-desktop-amd64)的 虚拟机。
- 在三台虚拟机上都安装了Docker(Docker version 18.06.3-ce, build d7080c1)。
开始
ubuntu1: 172.17.123.212
ubuntu2: 172.17.123.213
ubuntu3: 172.17.123.211
- 在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.
- 在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
- 在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个容器。可以分别在每个节点查看
在不同主机上的容器之间通信
- 初始化swarm集群
- 在manager节点创建一个overlay网络
- 在manager节点上创建一个容器,加入这个网络
- 在worker节点上创建一个容器,加入这个网络
- 这两个容器之间可以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节点
网友评论