diff --git a/scripts/fix_docker.sh b/scripts/fix_docker.sh new file mode 100644 index 0000000..30cf64c --- /dev/null +++ b/scripts/fix_docker.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +set -e + +# Ensure script is run as root +if [[ $EUID -ne 0 ]]; then + echo "This script must be run with sudo or as root." + exit 1 +fi + +# 1) Remove any old Docker and Docker Compose packages +echo "Removing old Docker packages..." +set +e +apt-get remove -y \ + docker docker-engine docker.io docker-ce docker-ce-cli \ + containerd runc \ + docker-compose +set -e +# Note: The above command may fail if Docker is not installed, which is fine. +# The script will continue to install the latest version. + +# 2) Update package index +echo "Updating APT package index..." +apt-get update -y + +# 3) Install prerequisite packages +echo "Installing prerequisites..." +apt-get install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release + +# 4) Add Docker’s official GPG key +echo "Adding Docker’s GPG key..." +install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ + | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +chmod a+r /etc/apt/keyrings/docker.gpg + +# 5) Set up the Docker APT repository +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" \ + | tee /etc/apt/sources.list.d/docker.list > /dev/null + +# 6) Update the package index again +echo "Updating APT package index with Docker repo..." +apt-get update -y + +# 7) Install the latest Docker Engine, CLI, containerd, and Compose plugin +echo "Installing Docker Engine, CLI, containerd, and Docker Compose plugin..." +apt-get install -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-compose-plugin + +# 8) (Optional) Install legacy docker-compose binary +# Uncomment below if you still need the standalone 'docker-compose' command +# echo "Installing legacy docker-compose binary..." +# COMPOSE_LATEST=$(curl -s https://api.github.com/repos/docker/compose/releases/latest \ +# | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') +# curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_LATEST}/docker-compose-$(uname -s)-$(uname -m)" \ +# -o /usr/local/bin/docker-compose +# chmod +x /usr/local/bin/docker-compose + +# 9) Add current user to the 'docker' group (so you can run docker without sudo) +USER_NAME=${SUDO_USER:-$(whoami)} +echo "Adding user '$USER_NAME' to docker group..." +usermod -aG docker "$USER_NAME" + +# 10) Enable and start Docker +echo "Enabling and starting Docker service..." +systemctl enable docker +systemctl start docker + +# 11) Verify installation +echo "Verifying Docker installation..." +docker --version +docker compose version || echo "Docker Compose plugin installed; use 'docker compose'." + +echo "Done! Please log out and back in (or reboot) for group changes to take effect."