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
}
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