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
This commit is contained in:
DhanushSantosh
2026-01-17 14:40:08 +05:30
parent bc09a22e1f
commit 33fa138d21

View File

@@ -200,6 +200,8 @@ check_required_commands() {
fi fi
} }
DOCKER_CMD="docker"
check_docker() { check_docker() {
if ! command -v docker &> /dev/null; then if ! command -v docker &> /dev/null; then
echo "${C_RED}Error:${RESET} Docker is not installed or not in PATH" echo "${C_RED}Error:${RESET} Docker is not installed or not in PATH"
@@ -207,12 +209,22 @@ check_docker() {
return 1 return 1
fi fi
if ! docker info &> /dev/null; then if ! docker info &> /dev/null 2>&1; then
echo "${C_RED}Error:${RESET} Docker daemon is not running" if sg docker -c "docker info" &> /dev/null 2>&1; then
echo "Please start Docker and try again" DOCKER_CMD="sg docker -c"
return 1 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 fi
export DOCKER_CMD
return 0 return 0
} }
@@ -291,7 +303,11 @@ check_running_containers() {
local running_containers="" local running_containers=""
# Get list of running automaker 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 if [ -n "$running_containers" ] && [ "$running_containers" != " " ]; then
get_term_size get_term_size
@@ -319,9 +335,13 @@ check_running_containers() {
[sS]|[sS][tT][oO][pP]) [sS]|[sS][tT][oO][pP])
echo "" echo ""
center_print "Stopping existing containers..." "$C_YELLOW" center_print "Stopping existing containers..." "$C_YELLOW"
docker compose -f "$compose_file" down 2>/dev/null || true if [ "$DOCKER_CMD" = "sg docker -c" ]; then
# Also try stopping any orphaned containers sg docker -c "docker compose -f '$compose_file' down" 2>/dev/null || true
docker ps --filter "name=automaker-dev" -q 2>/dev/null | xargs -r docker stop 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" center_print "✓ Containers stopped" "$C_GREEN"
echo "" echo ""
return 0 # Continue with fresh start return 0 # Continue with fresh start
@@ -329,7 +349,11 @@ check_running_containers() {
[rR]|[rR][eE][sS][tT][aA][rR][tT]) [rR]|[rR][eE][sS][tT][aA][rR][tT])
echo "" echo ""
center_print "Stopping and rebuilding containers..." "$C_YELLOW" 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" center_print "✓ Ready to rebuild" "$C_GREEN"
echo "" echo ""
return 0 # Continue with rebuild return 0 # Continue with rebuild
@@ -1170,10 +1194,18 @@ case $MODE in
center_print "API: http://localhost:$DEFAULT_SERVER_PORT" "$C_GREEN" center_print "API: http://localhost:$DEFAULT_SERVER_PORT" "$C_GREEN"
center_print "Press Ctrl+C to detach" "$C_MUTE" center_print "Press Ctrl+C to detach" "$C_MUTE"
echo "" echo ""
if [ -f "docker-compose.override.yml" ]; then if [ "$DOCKER_CMD" = "sg docker -c" ]; then
docker compose -f docker-compose.dev.yml -f docker-compose.override.yml logs -f 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 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 fi
else else
echo "" echo ""
@@ -1192,10 +1224,18 @@ case $MODE in
echo "" echo ""
center_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" "$C_GRAY" center_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" "$C_GRAY"
echo "" echo ""
if [ -f "docker-compose.override.yml" ]; then if [ "$DOCKER_CMD" = "sg docker -c" ]; then
docker compose -f docker-compose.dev.yml -f docker-compose.override.yml up --build 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 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
fi fi
;; ;;
@@ -1235,10 +1275,18 @@ case $MODE in
else else
center_print "Starting Docker server container..." "$C_MUTE" center_print "Starting Docker server container..." "$C_MUTE"
echo "" echo ""
if [ -f "docker-compose.override.yml" ]; then if [ "$DOCKER_CMD" = "sg docker -c" ]; then
docker compose -f docker-compose.dev-server.yml -f docker-compose.override.yml up --build & 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 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 fi
DOCKER_PID=$! DOCKER_PID=$!
fi fi
@@ -1284,7 +1332,11 @@ case $MODE in
echo "" echo ""
center_print "Shutting down Docker container..." "$C_MUTE" center_print "Shutting down Docker container..." "$C_MUTE"
[ -n "$DOCKER_PID" ] && kill $DOCKER_PID 2>/dev/null || true [ -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" center_print "Done!" "$C_GREEN"
;; ;;
esac esac