通常当我们创建docker容器(例如nginx)并将其暴露给外部时,我们使用端口映射。
docker run -p 8091:80 --name container1 --net my-overlay-a nginx
docker run -p 8092:80 --name container1 --net my-overlay-a nginx ( if in this line if I specified 8091:80 then it create problem as on host machine 8091 already used to map 80 port of container1).
如果我使用docker服务(在此之前我做了docker swarm init),现在不用docker run。
docker service create --name redis --replicas=2 --publish 8080:80 nginx
这也将创建两个容器,但两个容器都由相同的端口8080访问。
这怎么可能?
答案 0 :(得分:2)
docker swarm使用路由网格技术,入口网络。在创建服务时定义端口时,即使创建了多个容器,服务也会在每个节点中公开相同的端口。并且swarm具有内置的负载均衡器,它将在所有容器中路由流量