docker创建overylay网络容器互通不了

背景

在用docker swarm想做跨主机容器互通的时候遇到容器互不通的问题,研究了好久

首先配置swarm集群

docker swarm init   #管理节点上执行
docker swarm join --token SWMTKN-1-0iq85hac12m20vmc19s5xzlmnxi77ab74dn4adpuoa44bi0xmj-58e2jqov91fu2v7vw5vzp6coj 10.10.10.203:2377 #工作切点上执行

给出试验docker-compose文件

version: "3.7"
networks:
  network-nginx:
    driver: overlay
services:
    nginx1:
      image: nginx:1.19.2
      ports:
        - 8801:80
      networks:
        - network-nginx
      deploy:
        mode: replicated
        replicas: 1
        restart_policy:
          condition: on-failure
    nginx2:
      image: nginx:1.19.2
      ports:
        - 8800:80
      networks:
        - network-nginx
      deploy:
        mode: replicated
        replicas: 1
        restart_policy:
          condition: on-failure

执行部署

docker stack deploy -c docker-compose-nginx.yml nginx

查看部署结果

root@localhost-203-root-all docker-swarm]# docker stack ls
NAME SERVICES ORCHESTRATOR
nginx 2 Swarm

分别登陆两个节点容器进行curl

结果是在nginx1容器curl nginx2:80卡住不响应
在nginx2容器curl nginx1:80同样卡住不响应

查看网络

docker network ls
tepstma6heze   nginx_network-nginx     overlay   swarm

发现两个节点都有创建网络

接下来做了以下检查

  1. 检查防火墙开放端口,发现curl宿主机显露的端口是可以
  2. 关闭selinux
  3. 查看转发是否开启 cat /proc/sys/net/ipv4/ip_forward
  4. 更换另一台主机
  5. 手工单独创建overla网络测试

    创建overlay网络进行测试

    安装consul,因为需要将overlay网络的配置信息保存在consul,才能在集群传递

    docker run -id -p 8500:8500 harbor.xxx.com/xxx/consul:1.7.3

    配置/usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd后面增加--cluster-store=consul://10.10.10.203:8500 --cluster-advertise=ens192:2376
    修改配置后
    systemctl daemon-reload
    systemctl restart docker

    创建overlay网络

    docker network create -d overlay --subnet 10.10.20.0/24 --attachable net

    这时在两个节点查看网络都有了

    docker network ls

    运行busybox测试

    docker run -it --net=net busybox
    发现nginx1仍然ping不通nginx2

    结果仍然是网络问题

    尝试关闭防火墙,再测试,居然可以了。也不知道是什么原因。我在想应该是docker swarm启用了自己的端口吧。

上一篇:leetcode-406. 根据身高重建队列


下一篇:Event Handler Content must support at least one class.