Restart Docker Containers when they Crash Automatically

docker, docker-compose, docker-container

Solution

If you're using compose, it has a restart flag which is analogous to the one existing in the docker run command, so you can use that. Here is a link to the documentation about this part - https://docs.docker.com/compose/compose-file/

When you deploy out, it depends where you deploy to. Most container clusters like kubernetes, mesos or ECS would have some configuration you can use to auto-restart your containers. If you don't use any of these tools you are probably starting your containers manually and can then just use the restart flag just as you would locally.

Problem

I want to restart a container if it crashes automatically. I am not sure how to go about doing this. I have a script docker-compose-deps.yml that has elasticsearch, redis, nats, and mongo. I run this in the terminal to set this up: `docker-compose -f docker-compose-deps.yml up -d`. After this I set up my containers by running: `docker-compose up -d`. Is there a way to make these containers restart if they crash? I noticed that docker has a built in restart, but I don't know how to implement this. After some feedback I added `restart: always` to my `docker-compose` file and my `docker-compose-deps.yml` file. Does this look correct? Or is this how you would implement the restart always? docker-compose sample ``` myproject-server: build: "../myproject-server" dockerfile: Dockerfile-dev restart: always ports: - 5880:5880 - 6971:6971 volumes: - "../myproject-server/src:/src" working_dir: "/src" external_links: - nats - mongo - elasticsearch - redis myproject-associate: build: "../myproject-associate" dockerfile: Dockerfile-dev restart: always ports: - 5870:5870 volumes: - "../myproject-associate/src:/src" working_dir: "/src" external_links: - nats - mongo - elasticsearch - redis ``` docker-compose-deps.yml sample ``` nats: image: nats container_name: nats restart: always ports: - 4222:4222 mongo: image: mongo container_name: mongo restart: always volumes: - "./data:/data" ports: - 27017:27017 ```

Original source