FG
☁️ Cloud & DevOpsDocker

[1.7] CTRL+C fails to stop containers when running compose in the foreground

Freshabout 19 hours ago
Mar 14, 20260 views
Confidence Score95%
95%

Problem

I can't reproduce it but I would say about 10% of the time when I hit CTRL+C, the containers that were started with `docker-compose up` fail to stop. I'll get an ABORT message in the terminal but they are still up. When it works, it says "gracefully stopping..." instead of ABORT. At this point I need to `docker-compose stop` them to "really" stop them. It was much worse in earlier versions of Compose but it's still happening often enough that I feel like it needs some attention. If you need more info let me know. Environment System [code block] Docker [code block] Docker Compose [code block] Potentially relevant information When I encounter the issue I'm always running multiple containers, such as postgres, redis, and multiple web services. I never run 1 container so I can't say for sure if it would happen with only 1. It happens with and without using `links` and both the legacy and v2 `docker-compose.yml` files.

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Implement Graceful Shutdown Handling for Docker Compose

Medium Risk

The issue arises from the way Docker Compose handles SIGINT signals (triggered by CTRL+C) when multiple containers are running. In some cases, the signal may not propagate correctly to all child processes, leading to an incomplete shutdown and resulting in the 'ABORT' message. This can be exacerbated by the presence of multiple services that may have different shutdown behaviors.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Update Docker Compose to the Latest Version

    Ensure that you are using the latest version of Docker Compose, as many bugs related to signal handling have been fixed in recent updates.

    bash
    docker-compose --version
  2. 2

    Add Stop Signal in docker-compose.yml

    Specify a stop signal in your docker-compose.yml file for each service to ensure they handle shutdown properly. Use 'SIGTERM' for graceful shutdown.

    yaml
    version: '3'
    services:
      web:
        image: your-web-image
        stop_signal: SIGTERM
      db:
        image: postgres
        stop_signal: SIGTERM
  3. 3

    Increase Timeout for Stopping Containers

    Increase the stop timeout in your docker-compose.yml to allow more time for containers to shut down gracefully. This can help prevent abrupt terminations.

    yaml
    version: '3'
    services:
      web:
        image: your-web-image
        stop_grace_period: 1m
      db:
        image: postgres
        stop_grace_period: 1m
  4. 4

    Use Docker Compose in Detached Mode

    If the issue persists, consider running Docker Compose in detached mode using 'docker-compose up -d'. This allows you to manage the containers independently and may help avoid signal handling issues.

    bash
    docker-compose up -d
  5. 5

    Monitor Container Logs for Errors

    After implementing the above changes, monitor the logs of your containers using 'docker-compose logs' to check for any errors or warnings during shutdown.

    bash
    docker-compose logs

Validation

To confirm the fix worked, run 'docker-compose up' and press CTRL+C. Observe that the containers stop with the message 'gracefully stopping...' instead of 'ABORT'. Additionally, verify that all containers are stopped by running 'docker ps' and ensuring no relevant containers are running.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

dockerdocker-composecontainerskind/bug