I have a docker-compose with 3 services: config-server, cpo-events and cpo-executor. I want that the services start only when config-server is ready because the services need the config files that are in config-server service.
docker-compose.yml:
version: '3.7'
services:
    config-server:
        container_name: cup-config-server
        image: cup-config-server:1.0.0
        expose:
            - 8888
        ports:
            - 8888:8888
        networks:
            - spring-cloud-network
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:8888/cpo-executor/dev"]
            interval: 30s
            timeout: 10s
            retries: 5
    cpo-events:
        container_name: cpo-events-kafka
        image: cpo-events-kafka:1.0.0
        expose:
            - 8878
        ports:
            - 8878:8878
        networks:
            - spring-cloud-network
        depends_on:
            - config-server
        links: 
            - config-server
    cpo-executor:
        container_name: cpo-executor
        image: cpo-executor:1.0.0
        expose:
            - 8879
        ports:
            - 8879:8879
        networks:
            - spring-cloud-network
        depends_on:
            - config-server
        links: 
            - config-server
networks:
    spring-cloud-network:
        driver: bridge
Depends_on, links, healthcheck, nothing is guaranteeing the two services(cpo-executor, cpo-event) to start only after config-server is ready.
                        
If you are testing the services locally, then you can add an entry point script
You can check the full example usage here. It solves the same problem but for different use case with docker-compose version 3.7