user11810894
user11810894

Reputation:

How to auto-restart a docker-compose cluster when EC2 instance reboots

I had this docker-compose.yml file:

version: '2.2'
services:
  kibana:
    restart: always
    depends_on:
      - es01
      - es02
    image: docker.elastic.co/kibana/kibana:7.3.1
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_HOSTS: http://es01:9200
      ELASTICSEARCH_URL: http://es01:9200
  es01:
    restart: always
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.1
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
  es02:
    restart: always
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.1
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

but these containers did not restart when the ec2 instance rebooted. Maybe I should use something like this instead:

docker-compose up -d --restart   # the --restart flag maybe?

?

Notice the "restart" properties in the yml file, guess they didn't do anything in this case?

But there is no --restart flag:

(account-api) ubuntu@account_management5-interos:~/interos/repos/elastic-search-app$

docker-compose up -d --restart Builds, (re)creates, starts, and attaches to containers for a service.

Unless they are already running, this command also starts any linked services.

The `docker-compose up` command aggregates the output of each container. When
the command exits, all containers are stopped. Running `docker-compose up -d`
starts the containers in the background and leaves them running.

If there are existing containers for a service, and the service's configuration
or image was changed after the container's creation, `docker-compose up` picks
up the changes by stopping and recreating the containers (preserving mounted
volumes). To prevent Compose from picking up changes, use the `--no-recreate`
flag.

If you want to force Compose to stop and recreate all containers, use the
`--force-recreate` flag.

Usage: up [options] [--scale SERVICE=NUM...] [SERVICE...]

Options:
    -d, --detach               Detached mode: Run containers in the background,
                               print new container names. Incompatible with
                               --abort-on-container-exit.
    --no-color                 Produce monochrome output.
    --quiet-pull               Pull without printing progress information
    --no-deps                  Don't start linked services.
    --force-recreate           Recreate containers even if their configuration
                               and image haven't changed.
    --always-recreate-deps     Recreate dependent containers.
                               Incompatible with --no-recreate.
    --no-recreate              If containers already exist, don't recreate
                               them. Incompatible with --force-recreate and -V.
    --no-build                 Don't build an image, even if it's missing.
    --no-start                 Don't start the services after creating them.
    --build                    Build images before starting containers.
    --abort-on-container-exit  Stops all containers if any container was
                               stopped. Incompatible with -d.
    -t, --timeout TIMEOUT      Use this timeout in seconds for container
                               shutdown when attached or when containers are
                               already running. (default: 10)
    -V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving
                               data from the previous containers.
    --remove-orphans           Remove containers for services not defined
                               in the Compose file.
    --exit-code-from SERVICE   Return the exit code of the selected service
                               container. Implies --abort-on-container-exit.
    --scale SERVICE=NUM        Scale SERVICE to NUM instances. Overrides the
                               `scale` setting in the Compose file if present.

I am looking for the equivalent to:

docker run -d -p 27017:27017 \
    --restart unless-stopped \    # RESTART
    --name 'interos-mongo' \
    'mongo:4.0' 

Upvotes: 3

Views: 1521

Answers (1)

Jintao Zhang
Jintao Zhang

Reputation: 798

In fact docker-compose doesn't handle real restarts, these are done by dockerd.

The restart policy written in the compose configuration file will eventually be written to the container's restart policy, which you can check with the following command.

docker inspect --format '{{.HostConfig.RestartPolicy}}' you-container-ID-or-name

Going back to your question, have you set up dockerd to auto starting? i.e. systemctl enable docker

xref: https://docs.docker.com/compose/production/

Upvotes: 1

Related Questions