你可以看看Docker 流程:代理 https://github.com/vfarcic/docker-flow-proxy用作易于配置的反向代理。
但是,我相信,正如其他评论员所指出的那样,Docker 1.12 群模式存在一个根本问题,即多个服务公开同一端口(例如 80 或 8080)。
它归结为(我认为)网状路由魔法 - 这是 4 级四级的东西,基本上意味着 TCP/IP - 换句话说,IP 地址 + 端口。
因此,当多个服务在(例如)端口 8080 上列出时,事情会变得混乱。网状路由器会很乐意将前往端口 8080 的流量传递给公开同一端口的任何服务。
您可以在群体模式下使用覆盖网络将事物彼此隔离,但是当您必须将服务连接到代理(覆盖网络)时,问题就出现了 - 那时看起来事情变得混乱了(这就是我所在的地方)现在遇到困难)。
我目前的解决方案是让需要暴露给网络的服务使用唯一的端口,就面向代理(覆盖)网络而言(它们不必发布到群!),然后实际使用 Docker Flow Proxy 之类的东西来处理所需端口上的传入流量。
快速示例让您开始(大致基于this https://technologyconversations.com/2016/08/01/integrating-proxy-with-docker-swarm-tour-around-docker-1-12-series/:
docker network create --driver overlay proxy
docker network create --driver overlay my-app
# App1 exposed port 8081
docker service create --network proxy --network my-app --name app1 myApp1DockerImage
docker service create --name proxy \
-p 80:80 \
-p 443:443 \
-p 8080:8080 \
--network proxy \
-e MODE=swarm \
vfarcic/docker-flow-proxy
#App2 exposes port 8080
docker service create --network proxy --network my-app --name app2 myApp2DockerImage
然后,您根据其配置反向代理文档 https://github.com/vfarcic/docker-flow-proxy/blob/master/articles/swarm-mode.md.
注意:我看到现在有新的AUTO https://github.com/vfarcic/docker-flow-proxy/blob/master/articles/swarm-mode-listener.md可用配置 - 我还没有尝试过。
如果一切正常的话最终结果:
- 代理侦听端口 80、443(以及用于配置调用的 8080,因此请使其远离公共网络!)
- 代理转发到适当的服务,基于
service domain
or service path
(我遇到了问题service path
)
- 服务可以通过隔离的覆盖网络进行内部通信。
- 服务不会向集群发布不必要的端口
[编辑2016/10/20]
忽略上面关于连接到代理的同一覆盖网络上的相同暴露端口的问题的所有内容。
我拆除了我的设置,然后重新开始 - 现在一切都按预期工作:我可以通过 docker flow 代理使用不同的域访问端口 80 上的多个(不同的)服务。
还使用提到的自动配置 - 一切都像魅力一样工作。