Why is dockercloud-haproxy returning an Empty reply from server?

I’m trying to spin up a docker swarm to test locally. However, when i try and curl my API through haproxy,

$ curl http://localhost/api/fish/
curl: (52) Empty reply from server

I’ve tested this configuration with a non swarm docker-compose file and it behaves correctly.

Here’s my swarm compose file:

version: '3'

services:
  api:
   image: fish/api
   ports:
     - 8001
   environment:
     - SERVICE_PORTS=8001
   networks:
     - "po-net"
   deploy:
     replicas: 5
     update_config:
       parallelism: 5
       delay: 10s
     restart_policy:
       condition: on-failure
       max_attempts: 3
       window: 120s

  proxy:
    image: dockercloud/haproxy
    depends_on:
      - api
    environment:
      - BALANCE=leastconn
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 80:80
    networks:
        - "po-net"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  po-net:
    driver: overlay

It looks like the services are starting as expected:

ID                  NAME                 MODE                REPLICAS            IMAGE                        PORTS
2aicvkmrfxf9        fish_proxy         replicated          1/1                 dockercloud/haproxy:latest   *:80->80/tcp
i1ovljnq49o5        fish_po-postgres   replicated          1/1                 fish/po-postgres:latest
keqymi99vji1        fish_api        replicated             5/5                 fish/api:latest         		*:30000->8001/tcp

And all the log outputs for the api say its awaiting connections on port 8001.

Is there something im doing wrong with haproxy? I would expect the above config to route from 80 on host to next available fish_api on container port 8001

use this bro