docker-compose healthcheck for rabbitMQ

I’m trying to run rabbitMQ using docker-compose, but the service is always starting or unhealthy.
rabbit is running fine, so I suspect there is something wrong with my health check.

Running the healthcheck command locally does return a value.

> curl -f http://localhost:5672
AMQP    %

But docker-compose ps always says the service is unhealthy (or starting, before it runs out of time).

> docker-compose ps
docker-entrypoint.sh rabbi ...   Up (unhealthy)   15671/tcp

Here is what my docker-compose.yml file looks like.

# docker-compose.yml
version: '2.3' # note: I can't change this version, must be 2.3

volumes:
  rabbit-data:

services:
  rabbit:
    hostname: 'rabbit'
    image: rabbitmq:3.8.5-management
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5672"]
      interval: 30s
      timeout: 30s
      retries: 3
    ports:
      - '5672:5672'
      - '15672:15672'
    volumes:
      - 'rabbit-data:/var/lib/rabbitmq/mnesia/'
    networks:
      - rabbitmq

networks:
  rabbitmq:
    driver: bridge

I have also tried using nc instead of curl in the healthcheck, but got the same result.

healthcheck:
  test: [ "CMD", "nc", "-z", "localhost", "5672" ]

From https://github.com/docker-library/rabbitmq/issues/326

Go to Source
Author: con–