From f918876a783b4c980000e08547df416c1315fa05 Mon Sep 17 00:00:00 2001 From: Christopher <1289128+dragonfire1119@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:56:33 -0600 Subject: [PATCH] Fix docker permission with docker group (#57) * Add user to docker group and improve Docker service handling Introduces a function to add the current user to the docker group if not running as root, with instructions for group change to take effect. Also enables docker.socket and docker service before starting them, and updates step numbering for CasaOS service restart. * Remove manual Docker directory permission fixes Eliminated explicit chown and chmod operations on Docker directories and subdirectories. The script now relies on Docker to set its own directory permissions on startup, simplifying the cleanup process and reducing potential permission issues. * Update script version to 1.2.0 in run.sh Bumped the displayed version number in the CasaOS Docker Version Fix Script from 1.1.0 to 1.2.0. --- casaos-fix-docker-api-version/run.sh | 116 ++++++++++++++++----------- 1 file changed, 67 insertions(+), 49 deletions(-) diff --git a/casaos-fix-docker-api-version/run.sh b/casaos-fix-docker-api-version/run.sh index df0537c..d8f989c 100755 --- a/casaos-fix-docker-api-version/run.sh +++ b/casaos-fix-docker-api-version/run.sh @@ -20,7 +20,7 @@ else fi echo "==========================================" -echo "BigBear CasaOS Docker Version Fix Script 1.1.0" +echo "BigBear CasaOS Docker Version Fix Script 1.2.0" echo "==========================================" echo "" echo "Here are some links:" @@ -124,6 +124,53 @@ check_containerd_version() { return 0 } +# Function to add user to docker group +add_user_to_docker_group() { + # Only add user to docker group if not running as root + if [ "$EUID" -ne 0 ]; then + local current_user=$(whoami) + + # Check if docker group exists + if getent group docker >/dev/null 2>&1; then + # Check if user is already in docker group + if ! groups "$current_user" | grep -q '\bdocker\b'; then + echo "Adding user '$current_user' to docker group..." + $SUDO usermod -aG docker "$current_user" + echo "" + echo "✓ User added to docker group" + echo "" + echo "==========================================" + echo "IMPORTANT: Group Change Requires New Login" + echo "==========================================" + echo "" + echo "For the docker group permission to take effect, you need to:" + echo " 1. Log out of your current session" + echo " 2. Log back in" + echo "" + echo "OR run this command to start a new shell with updated groups:" + echo " newgrp docker" + echo "" + echo "After that, you'll be able to run docker commands without sudo." + echo "" + return 0 + else + echo "User '$current_user' is already in docker group" + echo "" + return 0 + fi + else + echo "Warning: docker group does not exist" + echo "This is unusual - Docker installation may have issues" + echo "" + return 1 + fi + else + echo "Running as root - skipping docker group addition" + echo "" + return 0 + fi +} + # Function to stop CasaOS services stop_casaos_services() { echo "Stopping CasaOS services..." @@ -346,9 +393,9 @@ remove_standalone_docker_compose() { fi } -# Function to clean Docker state and fix permissions +# Function to clean Docker runtime state clean_docker_state() { - echo "Cleaning Docker state and fixing permissions..." + echo "Cleaning Docker runtime state..." # Stop Docker first if $SUDO systemctl is-active --quiet docker; then @@ -358,48 +405,30 @@ clean_docker_state() { echo "" fi - # Clean up Docker runtime state + # Clean up Docker runtime state (sockets, pids) if [ -d /var/run/docker ]; then - echo "Cleaning Docker runtime state..." + echo "Cleaning Docker sockets and pids..." $SUDO rm -rf /var/run/docker/* echo "" fi # Fix containerd state if [ -d /run/containerd ]; then - echo "Cleaning containerd state..." + echo "Cleaning containerd runtime state..." $SUDO rm -rf /run/containerd/runc $SUDO rm -rf /run/containerd/io.containerd* echo "" fi - # Clean up any stale container state + # Clean up any stale container pids if [ -d /var/lib/docker/containers ]; then - echo "Cleaning container state..." + echo "Cleaning stale container pids..." $SUDO find /var/lib/docker/containers -name "*.pid" -delete 2>/dev/null || true echo "" fi - # Fix core Docker directory permissions - if [ -d /var/lib/docker ]; then - echo "Fixing Docker directory permissions..." - $SUDO chown -R root:root /var/lib/docker - $SUDO chmod 711 /var/lib/docker - - # Fix specific subdirectories - [ -d /var/lib/docker/overlay2 ] && $SUDO chmod 755 /var/lib/docker/overlay2 - [ -d /var/lib/docker/containers ] && $SUDO chmod 755 /var/lib/docker/containers - [ -d /var/lib/docker/image ] && $SUDO chmod 755 /var/lib/docker/image - [ -d /var/lib/docker/volumes ] && $SUDO chmod 755 /var/lib/docker/volumes - - # Fix overlay2/l directory which is critical for overlay2 storage - if [ -d /var/lib/docker/overlay2/l ]; then - $SUDO chmod 700 /var/lib/docker/overlay2/l - fi - echo "" - fi - - echo "Docker state cleanup complete" + echo "Docker runtime cleanup complete" + echo "Docker will set its own directory permissions on startup" echo "" } @@ -546,17 +575,6 @@ downgrade_docker() { fi echo "" - # Fix overlay2 permissions if directory exists - if [ -d /var/lib/docker/overlay2 ]; then - echo "Fixing overlay2 directory permissions..." - $SUDO chown -R root:root /var/lib/docker/overlay2 - $SUDO chmod -R 755 /var/lib/docker/overlay2 - if [ -d /var/lib/docker/overlay2/l ]; then - $SUDO chmod 700 /var/lib/docker/overlay2/l - fi - echo "" - fi - # Reload systemd and restart Docker service echo "Reloading systemd daemon..." $SUDO systemctl daemon-reload @@ -569,13 +587,15 @@ downgrade_docker() { sleep 2 echo "" - # Start docker socket first, then service - echo "Starting Docker socket..." + # Enable and start docker socket first, then service + echo "Enabling and starting Docker socket..." + $SUDO systemctl enable docker.socket 2>/dev/null || true $SUDO systemctl start docker.socket sleep 1 echo "" - echo "Starting Docker service..." + echo "Enabling and starting Docker service..." + $SUDO systemctl enable docker $SUDO systemctl start docker sleep 3 echo "" @@ -722,16 +742,11 @@ downgrade_docker() { $SUDO mv /var/lib/docker /var/lib/docker.backup.$timestamp fi - # Recreate Docker directory structure - echo "Creating fresh Docker directory structure..." - $SUDO mkdir -p /var/lib/docker - $SUDO chmod 711 /var/lib/docker - # Clean all runtime state $SUDO rm -rf /run/containerd/* 2>/dev/null || true $SUDO rm -rf /var/run/docker/* 2>/dev/null || true - # Restart services + # Restart services - Docker will recreate /var/lib/docker with correct permissions echo "Starting Docker services..." $SUDO systemctl start containerd 2>/dev/null || true sleep 2 @@ -859,8 +874,11 @@ main() { fi echo "" + echo "Step 8: Configuring Docker permissions..." + add_user_to_docker_group + if [ "$CASAOS_INSTALLED" = true ]; then - echo "Step 8: Restarting CasaOS services..." + echo "Step 9: Restarting CasaOS services..." start_casaos_services echo "=========================================="