使用Docker和haproxy为了将请求负载均衡到多个embedded式tomcat实例

我正在尝试使用Docker和haproxy为了对多个embedded式的tomcats进行loadbalance / roundrobin请求。

我目前的configuration如下:

从docker-compose.yml

loadbalancer: image: haproxy links: - web ports: - "8080:8080" web: build: ./web 

来自./web/Dockerfile

 FROM java:8 ADD ./bignibou-server-1.0.jar /app/bignibou-server-1.0.jar ADD ./spring-cloud.properties /app/spring-cloud.properties ENV SPRING_CLOUD_PROPERTIESFILE=/app/spring-cloud.properties ENV SPRING_PROFILES_ACTIVE=cloud ENV SPRING_CLOUD_APP_NAME=bignibou ENV CLEARDB_DATABASE_URL=mysql://root:root@192.168.1.12:3306/bignibou_dev ENV REDISCLOUD_URL=redis://dummy:dummy@192.168.1.12:6379 ENV DYNO=dummy EXPOSE 8080 ENTRYPOINT [ "java", "-jar", "/app/bignibou-server-1.0.jar" ] 

当我做一个docker,组成规模的Web = 2,然后由docker组成,我看到两个Tomcat的启动,但后来我无法通过浏览器访问它们…

任何人都可以请build议如何访问我的负载平衡应用程序? 我努力了:

  • 172.17.42.1:8080
  • 172.17.42.1:80

无效(172.17.42.1是我的dockerIP)。

我需要进一步configurationhaproxy吗?

您将需要configurationHAProxy,提供有关后端服务器的信息以及要使用的负载均衡algorithm。 只需使用haproxy映像启动容器是不够的。

您将需要一个Dockerfile来使用haproxy映像,并将您特定的haproxyconfiguration文件复制到映像:您可以参考官方haproxy映像页面中的说明: https ://registry.hub.docker.com/_/haproxy/

如何使用HAProxy设置负载平衡: https : //serversforhackers.com/load-balancing-with-haproxy

我用Nginx,Node和Redis写了一个关于示例docker worflow的博客。 它描述了如何使用nginx加载平衡节点服务器: http : //anandmanisankar.com/posts/docker-container-nginx-node-redis-example/

从概念上说,它和HAProxy平衡tomcat服务器是一样的。 但configuration结构会有所不同。 希望这是有用的。

你需要修改你的端口8080的iptable规则吗?你可以检查一些东西。 netstat -anp | grep 8080来查看你的应用程序是否正在监听那个端口。 您也可以在主机上和容器内运行tcpdump来查看是否获取数据包。