---
title: "Prerequisites"
description: "Prerequisites for the Elasticsearch Connector Docker Compose tutorial."
---

# Prerequisites

> For the complete documentation index see: [llms.txt](https://aerospike.com/docs/llms.txt)
> 
> All documentation pages available in markdown.

## Applies to

This tutorial uses the following software versions.

-   Aerospike Database Enterprise Edition 8.1.1.0 (Community Edition does not support change notification)
-   Elasticsearch connector 3.0.2
-   [Aerospike Tools 13.0.1](https://aerospike.com/docs/database/tools/install/docker)
-   [Elasticsearch 9.5.0](https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-docker-basic)

## Prerequisites

This tutorial requires:

-   A Bash terminal with `curl`, `grep`, `awk`, `tr`, `cp`, `chmod`, `mkdir`, and `sleep`.
-   [Docker](https://docs.docker.com/get-docker/) 20.10 or later with Docker Compose v2, a running Docker service, and at least 4 GB of memory available to Docker.
-   An Aerospike Database Enterprise Edition feature-key file that is valid for version 8.1.1.0 and includes `asdb-change-notification true`. Community Edition does not support change notification and does not work for this tutorial. You can download a free Enterprise Edition feature-key file good for 60 days from [Get started with Aerospike](https://aerospike.com/get-started-aerospike-database/).
-   Network access to the container registries used by the tutorial. Access to the Elasticsearch connector image is subject to the requirements described in [Install the Elasticsearch connector](https://aerospike.com/docs/connectors/elasticsearch/install).
-   The container names `aerospike`, `elasticsearch`, `aerospike-elasticsearch-outbound`, and `aerospike-tools`, and local ports `8902` and `9200`, must be available.

## Optional readiness check

If you are not sure whether your system meets the prerequisites, open a terminal in the directory containing your `features.conf` feature-key file and run the following check. The script reports every check that passes or fails and returns a nonzero status if anything is missing. It inspects image manifests but does not pull images or start, stop, or remove containers.

Terminal

```bash
bash <<'CHECK'

FEATURE_KEY_FILE="./features.conf"

failures=0

pass() {

  printf 'PASS  %s\n' "$1"

}

fail() {

  printf 'FAIL  %s\n' "$1" >&2

  failures=$((failures + 1))

}

version_at_least() {

  local actual="${1#v}"

  local required="$2"

  local index actual_part required_part

  local -a actual_parts required_parts

  actual="${actual%%[-+]*}"

  IFS=. read -r -a actual_parts <<< "$actual"

  IFS=. read -r -a required_parts <<< "$required"

  for index in 0 1 2 3; do

    actual_part="${actual_parts[$index]:-0}"

    required_part="${required_parts[$index]:-0}"

    actual_part="${actual_part%%[!0-9]*}"

    required_part="${required_part%%[!0-9]*}"

    actual_part="${actual_part:-0}"

    required_part="${required_part:-0}"

    if ((actual_part > required_part)); then

      return 0

    fi

    if ((actual_part < required_part)); then

      return 1

    fi

  done

  return 0

}

for command_name in curl grep awk tr cp chmod mkdir sleep; do

  if command -v "$command_name" >/dev/null 2>&1; then

    pass "$command_name is installed"

  else

    fail "$command_name is not installed"

  fi

done

docker_installed=0

docker_running=0

if command -v docker >/dev/null 2>&1; then

  docker_installed=1

  docker_output="$(docker --version 2>/dev/null)"

  docker_version="${docker_output#Docker version }"

  docker_version="${docker_version%%,*}"

  if version_at_least "$docker_version" "20.10"; then

    pass "Docker ${docker_version} meets the 20.10 minimum"

  else

    fail "Docker ${docker_version:-unknown} does not meet the 20.10 minimum"

  fi

else

  fail "docker is not installed"

fi

if ((docker_installed)); then

  if docker compose version >/dev/null 2>&1; then

    pass "Docker Compose v2 is installed"

  else

    fail "Docker Compose v2 is not installed"

  fi

  if docker info >/dev/null 2>&1; then

    docker_running=1

    pass "Docker service is running"

    memory_bytes="$(docker info --format '{{.MemTotal}}' 2>/dev/null)"

    if [[ "$memory_bytes" =~ ^[0-9]+$ ]] && ((memory_bytes >= 4294967296)); then

      pass "Docker has at least 4 GB of memory available"

    else

      fail "Docker has less than 4 GB of memory available"

    fi

  else

    fail "Docker service is not running"

  fi

fi

if [ -r "$FEATURE_KEY_FILE" ]; then

  pass "Feature-key file is readable"

else

  fail "Feature-key file is not readable: $FEATURE_KEY_FILE"

fi

if grep -Eq '^asdb-change-notification[[:space:]]+true$' "$FEATURE_KEY_FILE" 2>/dev/null; then

  pass "Feature key enables change notification"

else

  fail "Feature key does not enable change notification"

fi

if ((docker_installed)); then

  for image in \

    aerospike/aerospike-server-enterprise:8.1.1.0 \

    docker.elastic.co/elasticsearch/elasticsearch:9.5.0 \

    aerospike/aerospike-elasticsearch-outbound:3.0.2 \

    aerospike/aerospike-tools:13.0.1; do

    if docker manifest inspect "$image" >/dev/null 2>&1; then

      pass "Container image is accessible: $image"

    else

      fail "Container image is not accessible: $image"

    fi

  done

fi

if ((docker_running)); then

  for container_name in aerospike elasticsearch aerospike-elasticsearch-outbound aerospike-tools; do

    if docker container inspect "$container_name" >/dev/null 2>&1; then

      fail "Container name is already in use: $container_name"

    else

      pass "Container name is available: $container_name"

    fi

  done

fi

for port in 8902 9200; do

  curl --silent --output /dev/null --noproxy '*' \

    --connect-timeout 1 --max-time 1 "http://127.0.0.1:${port}"

  curl_status=$?

  if [ "$curl_status" -eq 7 ]; then

    pass "Local port is available: $port"

  else

    fail "Local port might already be in use: $port"

  fi

done

printf '\n'

if [ "$failures" -eq 0 ]; then

  printf 'READY  All prerequisite checks passed.\n'

else

  printf 'NOT READY  %s prerequisite check(s) failed.\n' "$failures" >&2

  exit 1

fi

CHECK
```

The feature-key checks confirm that the file is readable and declares change notification. Aerospike Database validates the key’s signature and version or date limits when the container starts.

::: undefined
-   I have Aerospike Database Enterprise Edition with change notification enabled.
-   I have Docker and the required host tools installed.
-   I can access the required container images, and the required container names and ports are available.
:::

[Previous  
Tutorial: Get started with the Elasticsearch Connector](https://aerospike.com/docs/connectors/elasticsearch/learn/get-started) [Next  
Set up the project directory](https://aerospike.com/docs/connectors/elasticsearch/learn/get-started/step/1/part/0/set-up-project)