@toc
背景
在用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
發現兩個節點都有建立網絡
接下來做了以下檢查
- 檢查防火牆開放端口,發現curl主控端顯露的端口是可以
- 關閉selinux
- 檢視轉發是否開啟 cat /proc/sys/net/ipv4/ip_forward
- 更換另一台主機
- 手工單獨建立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這時在兩個節點檢視網絡都有了
運作busybox測試
結果仍然是網絡問題