demo:
  # container_name: ...
  deploy:
    replicas: 3
  # ports:
  #   - xxxx:xxxx

Remove conflicting container_name and port mappings, add the deploy section, and docker compose up will bring up multiple replicas that can be load balanced via DNS:

;; QUESTION SECTION:
;demo.                          IN      A

;; ANSWER SECTION:
demo.                   600     IN      A       172.18.0.16
demo.                   600     IN      A       172.18.0.11
demo.                   600     IN      A       172.18.0.13
demo.                   600     IN      A       172.18.0.17
demo.                   600     IN      A       172.18.0.2
demo.                   600     IN      A       172.18.0.12
demo.                   600     IN      A       172.18.0.14
demo.                   600     IN      A       172.18.0.15