1. Overview
This article documents the procedure to resolve Docker Engine and Docker Compose version prerequisite failures encountered during Netskope Cloud Exchange (CE) setup or upgrade on Ubuntu 22.04.5 LTS. The root causes identified are:
- Docker Engine: Package pinned at an older version; the official Docker apt repository not yet configured or cache outdated.
- Docker Compose: A manually installed standalone binary at ~/.docker/cli-plugins/docker-compose (installed July 2025) was taking priority over the updated apt plugin, causing the CE setup script to read the wrong version.
!!! Important Note: Make sure you have a backup of your Cloud Exchange instance or take a snapshot before starting the upgrade process.
2. Symptoms
When running the CE setup script (sudo python3 ./setup), the prerequisite check outputs one or both of the following failures:

3. Environment
- OS: Ubuntu 22.04
- Hypervisor: VMware
4. Root Cause Analysis
4.1 Docker Engine — Outdated Package
Docker Engine was installed at version 28.0.0 from the official repository but was never upgraded. The CE v6.1.0 setup script requires a minimum of 28.4.0. The apt candidate was already at 29.6.0, confirming that the repository was correctly configured but the package had not been updated.

4.2 Docker compose - Stale Standalone Binary (Primary Root Cause)
A standalone docker-compose binary was manually installed at ~/.docker/cli-plugins/docker-compose on July 2, 2025. Docker's CLI plugin resolution searches user-level paths (~/.docker/cli-plugins/) before system-level paths, so this old binary (v2.27.0) was always invoked instead of the updated apt plugin (5.2.0 / v5.2.0).

NOTE: Docker Compose changed its package versioning from 2.x to 5.x in late 2025. The package version (5.2.0) and the binary version reported by docker compose version (v5.2.0) are now aligned but differ from the legacy 2.x numbering. The CE setup script validates against the binary version, so removing the stale binary is mandatory.
5. Resolution Procedure
Step 1 — Verify the Docker apt Repository is Configured
Run the command below. If the output lists download.docker.com as the source, the repository is already configured and you can skip to Step 2.
apt-cache policy docker-ce
Expected output (repository already configured):

If the repository is not configured, run the following block first:
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: jammy
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
Step 2 — Upgrade Docker Engine and Compose Plugin
sudo apt install -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin
Expected output (abridged):

Step 3 — Check for a Stale Standalone Binary (Critical)
This is the primary root cause of the Docker Compose version mismatch. Check whether a manually installed binary exists:
ls -la ~/.docker/cli-plugins/
If docker-compose is listed, remove it:
rm ~/.docker/cli-plugins/docker-compose
WARNING: Do not skip this step even if the apt upgrade succeeded. The stale binary at ~/.docker/cli-plugins/ takes priority over the system plugin installed by apt, and docker compose version will continue to report the old version until it is removed.
Step 4 — Verify Both Versions
docker --version
docker compose version
Expected output:
Docker version 29.6.0, build fb59821
Docker Compose version v5.2.0
NOTE: CE v6.1.0 validates the numeric version string reported by 'docker compose version'. Both v5.2.0 and any 2.x >= 2.39.4 pass the minimum check. After removing the stale binary, the plugin reports v5.2.0, which satisfies the requirement.
Step 5 — Re-run the CE Setup Script
cd /opt/cloudexchange/cloudexchange
Expected prerequisite output (all passing):
The [!] warnings are informational only — the [P] status confirms both checks passed. Setup will continue to completion.
Verifying docker/podman prerequisites...
[P] Docker Version 29.6.0
[!] The recommended docker version is 28.4.0
[P] Docker Compose Version 5.2.0
[!] The recommended docker compose version is 2.39.4
sudo python3 ./setup
Step 6 — Start Cloud Exchange
./start
Expected output:
Docker Compose version v5.2.0
[+] Running 7/7
✔ Network cloudexchange_default Created
✔ Volume cloudexchange_nfs_repos Created
✔ Volume cloudexchange_nfs_plugins Created
✔ Container cloudexchange_mongodb-primary_1 Started
✔ Container cloudexchange_rabbitmq-stats_1 Started
✔ Container cloudexchange_core_1 Started
✔ Container cloudexchange_ui_1 Started
Cloud Exchange will start in few minutes and will be accessible on https://:443
7. Quick Reference — Full Command Sequence
Copy-paste block for use on a client environment with the same symptoms:
# Step 1 — Upgrade Docker Engine and Compose plugin
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin
# Step 2 — Remove stale standalone binary (root cause of Compose mismatch)
ls -la ~/.docker/cli-plugins/
rm ~/.docker/cli-plugins/docker-compose # only if file exists
# Step 3 — Validate
docker --version
docker compose version
# Step 4 — Re-run CE setup
cd /opt/cloudexchange/cloudexchange
sudo python3 ./setup
# Step 5 — Start CE
./start



