From 33fa138d21100f8ac0474bc680e04b4f8c6b9150 Mon Sep 17 00:00:00 2001 From: DhanushSantosh Date: Sat, 17 Jan 2026 14:40:08 +0530 Subject: [PATCH] feat: add docker group support with sg docker command Improve Docker access handling by detecting and using 'sg docker' command when the user is in the docker group but hasn't logged out yet. This allows running docker commands without requiring a full session restart after `usermod -aG docker $USER`. Changes: - Detect docker group access and fall back to sg docker -c when needed - Export DOCKER_CMD variable for use throughout the script - Update all docker compose and docker ps commands to use DOCKER_CMD - Improve error messages to guide users on fixing docker access issues --- start-automaker.sh | 90 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/start-automaker.sh b/start-automaker.sh index a9b19e17..a2d3e54c 100755 --- a/start-automaker.sh +++ b/start-automaker.sh @@ -200,6 +200,8 @@ check_required_commands() { fi } +DOCKER_CMD="docker" + check_docker() { if ! command -v docker &> /dev/null; then echo "${C_RED}Error:${RESET} Docker is not installed or not in PATH" @@ -207,12 +209,22 @@ check_docker() { return 1 fi - if ! docker info &> /dev/null; then - echo "${C_RED}Error:${RESET} Docker daemon is not running" - echo "Please start Docker and try again" - return 1 + if ! docker info &> /dev/null 2>&1; then + if sg docker -c "docker info" &> /dev/null 2>&1; then + DOCKER_CMD="sg docker -c" + else + echo "${C_RED}Error:${RESET} Docker daemon is not running or not accessible" + echo "" + echo "To fix, run:" + echo " sudo usermod -aG docker \$USER" + echo "" + echo "Then either log out and back in, or run:" + echo " newgrp docker" + return 1 + fi fi + export DOCKER_CMD return 0 } @@ -291,7 +303,11 @@ check_running_containers() { local running_containers="" # Get list of running automaker containers - running_containers=$(docker ps --filter "name=automaker-dev" --format "{{.Names}}" 2>/dev/null | tr '\n' ' ') + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + running_containers=$(sg docker -c "docker ps --filter 'name=automaker-dev' --format '{{{{Names}}}}'" 2>/dev/null | tr '\n' ' ' || true) + else + running_containers=$($DOCKER_CMD ps --filter "name=automaker-dev" --format "{{.Names}}" 2>/dev/null | tr '\n' ' ' || true) + fi if [ -n "$running_containers" ] && [ "$running_containers" != " " ]; then get_term_size @@ -319,9 +335,13 @@ check_running_containers() { [sS]|[sS][tT][oO][pP]) echo "" center_print "Stopping existing containers..." "$C_YELLOW" - docker compose -f "$compose_file" down 2>/dev/null || true - # Also try stopping any orphaned containers - docker ps --filter "name=automaker-dev" -q 2>/dev/null | xargs -r docker stop 2>/dev/null || true + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + sg docker -c "docker compose -f '$compose_file' down" 2>/dev/null || true + sg docker -c "docker ps --filter 'name=automaker-dev' -q" 2>/dev/null | xargs -r sg docker -c "docker stop" 2>/dev/null || true + else + $DOCKER_CMD compose -f "$compose_file" down 2>/dev/null || true + $DOCKER_CMD ps --filter "name=automaker-dev" -q 2>/dev/null | xargs -r $DOCKER_CMD stop 2>/dev/null || true + fi center_print "✓ Containers stopped" "$C_GREEN" echo "" return 0 # Continue with fresh start @@ -329,7 +349,11 @@ check_running_containers() { [rR]|[rR][eE][sS][tT][aA][rR][tT]) echo "" center_print "Stopping and rebuilding containers..." "$C_YELLOW" - docker compose -f "$compose_file" down 2>/dev/null || true + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + sg docker -c "docker compose -f '$compose_file' down" 2>/dev/null || true + else + $DOCKER_CMD compose -f "$compose_file" down 2>/dev/null || true + fi center_print "✓ Ready to rebuild" "$C_GREEN" echo "" return 0 # Continue with rebuild @@ -1170,10 +1194,18 @@ case $MODE in center_print "API: http://localhost:$DEFAULT_SERVER_PORT" "$C_GREEN" center_print "Press Ctrl+C to detach" "$C_MUTE" echo "" - if [ -f "docker-compose.override.yml" ]; then - docker compose -f docker-compose.dev.yml -f docker-compose.override.yml logs -f + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + if [ -f "docker-compose.override.yml" ]; then + sg docker -c "docker compose -f 'docker-compose.dev.yml' -f 'docker-compose.override.yml' logs -f" + else + sg docker -c "docker compose -f 'docker-compose.dev.yml' logs -f" + fi else - docker compose -f docker-compose.dev.yml logs -f + if [ -f "docker-compose.override.yml" ]; then + $DOCKER_CMD compose -f docker-compose.dev.yml -f docker-compose.override.yml logs -f + else + $DOCKER_CMD compose -f docker-compose.dev.yml logs -f + fi fi else echo "" @@ -1192,10 +1224,18 @@ case $MODE in echo "" center_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" "$C_GRAY" echo "" - if [ -f "docker-compose.override.yml" ]; then - docker compose -f docker-compose.dev.yml -f docker-compose.override.yml up --build + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + if [ -f "docker-compose.override.yml" ]; then + sg docker -c "docker compose -f 'docker-compose.dev.yml' -f 'docker-compose.override.yml' up --build" + else + sg docker -c "docker compose -f 'docker-compose.dev.yml' up --build" + fi else - docker compose -f docker-compose.dev.yml up --build + if [ -f "docker-compose.override.yml" ]; then + $DOCKER_CMD compose -f docker-compose.dev.yml -f docker-compose.override.yml up --build + else + $DOCKER_CMD compose -f docker-compose.dev.yml up --build + fi fi fi ;; @@ -1235,10 +1275,18 @@ case $MODE in else center_print "Starting Docker server container..." "$C_MUTE" echo "" - if [ -f "docker-compose.override.yml" ]; then - docker compose -f docker-compose.dev-server.yml -f docker-compose.override.yml up --build & + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + if [ -f "docker-compose.override.yml" ]; then + sg docker -c "docker compose -f 'docker-compose.dev-server.yml' -f 'docker-compose.override.yml' up --build" & + else + sg docker -c "docker compose -f 'docker-compose.dev-server.yml' up --build" & + fi else - docker compose -f docker-compose.dev-server.yml up --build & + if [ -f "docker-compose.override.yml" ]; then + $DOCKER_CMD compose -f docker-compose.dev-server.yml -f docker-compose.override.yml up --build & + else + $DOCKER_CMD compose -f docker-compose.dev-server.yml up --build & + fi fi DOCKER_PID=$! fi @@ -1284,7 +1332,11 @@ case $MODE in echo "" center_print "Shutting down Docker container..." "$C_MUTE" [ -n "$DOCKER_PID" ] && kill $DOCKER_PID 2>/dev/null || true - docker compose -f docker-compose.dev-server.yml down 2>/dev/null || true + if [ "$DOCKER_CMD" = "sg docker -c" ]; then + sg docker -c "docker compose -f 'docker-compose.dev-server.yml' down" 2>/dev/null || true + else + $DOCKER_CMD compose -f docker-compose.dev-server.yml down 2>/dev/null || true + fi center_print "Done!" "$C_GREEN" ;; esac