Back to Articles
DevOps

Understanding Docker Container Exit Codes

William Javier Acelas Granados
March 15, 2023
8 min read
Intermediate
Understanding Docker Container Exit Codes

Docker containers can exit unexpectedly for various reasons, and understanding the exit codes is crucial for effective troubleshooting. In this article, we'll explore common Docker container exit codes, what they mean, and how to resolve the underlying issues.

The Problem

You've deployed a Docker container, but it keeps stopping with an exit code. You run docker ps -a and see something like this:

CONTAINER ID   IMAGE          COMMAND        CREATED        STATUS                     PORTS     NAMES
3a6e73c58d53   my-app:latest  "npm start"    2 minutes ago  Exited (137) 30 seconds ago            my-container

What does "Exited (137)" mean, and how do you fix it?

Understanding Exit Codes

Docker exit codes can be categorized into several types:

  • Exit Code 0: Normal exit, no errors
  • Exit Code 1: Application error or generic error
  • Exit Code 137: Container was killed (often due to OOM - Out of Memory)
  • Exit Code 139: Container crashed with a segmentation fault
  • Exit Code 143: Container received SIGTERM

In our example, Exit Code 137 indicates that the container was likely terminated because it exceeded its memory limits.

Solutions by Experience Level

Choose the solution that best matches your experience level. Each approach solves the same problem but with varying levels of complexity and depth.

Checking Container Logs

The first step is to check the container logs to understand what happened before the container exited:

docker logs my-container

Look for any error messages or warnings that might indicate memory issues.

Increasing Container Memory

If you confirm that the container is running out of memory, you can increase the memory limit when running the container:

docker run --memory=1g --memory-swap=2g my-app:latest

This allocates 1GB of memory to the container and 2GB of swap space.

Optimizing Your Application

Consider optimizing your application to use less memory. For Node.js applications, you can set memory limits:

node --max-old-space-size=512 app.js