You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minikube启动报DRV_NOT_HEALTHY错误,手动执行Docker组命令恢复求助

Minikube启动报错DRV_NOT_HEALTHY的解决建议

问题描述

通过Bash脚本完成Docker、Skaffold、Minikube和kubectl的安装后,启动Minikube时出现以下错误:

Exiting due to DRV_NOT_HEALTHY: Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.

但手动执行脚本中已有的命令sudo usermod -aG docker $USER && newgrp docker后,Minikube即可正常启动。完整安装脚本如下:

#!/bin/bash

function run_command {
    local cmd="$1"
    local spinner_text="$2"

    echo -n "$spinner_text"
    {
        eval "$cmd" &>/dev/null
    } &
    local spinner=$!

    local spin='-\|/'
    local i=0
    while kill -0 $spinner 2>/dev/null
    do
        i=$(( (i+1) %4 ))
        printf "\r$spinner_text ${spin:$i:1}"
        sleep .1
    done

    wait $spinner
    local exit_code=$?

    if [[ $exit_code != 0 ]]; then
        echo "Error: $cmd failed with exit code $exit_code."
        exit $exit_code
    fi

    echo "Done."
}

# Update package lists
run_command "apt-get update" "Updating package lists... "

# Install Docker
run_command "apt-get install -y docker.io" "Installing Docker... "

# Install Skaffold
run_command "curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin" "Installing Skaffold... "

# Install Minikube
run_command "curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin" "Installing Minikube... "

# Install kubectl
run_command "curl -LO https://storage.googleapis.com/kubernetes-release/release/\`curl -L https://storage.googleapis.com/kubernetes-release/release/stable.txt\`/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/" "Installing kubectl... "

# Add the current user to the Docker group
run_command "sudo usermod -aG docker $USER && newgrp docker" "Adding user to Docker group... "

# Add virtual host to /etc/hosts
run_command "echo '192.168.49.2    hcms.dev' | sudo tee -a /etc/hosts" "Adding virtual host to /etc/hosts... "

echo "Installation complete."

原因分析

脚本中的newgrp docker命令是在run_command函数的子shell中执行的(函数内用后台进程+eval执行命令),子shell的组切换不会影响父shell。这意味着脚本执行完成后,当前终端会话的用户组并未实际切换到docker组,导致Minikube启动时无法正常访问Docker驱动,触发DRV_NOT_HEALTHY错误。而手动执行该命令时,是在当前shell中直接生效,因此能解决问题。

解决建议

1. 调整用户组配置的执行逻辑

将newgrp docker从run_command函数中剥离出来,直接在父shell中执行,确保组切换生效:

# 替换原有的用户组配置代码
# Add the current user to the Docker group
run_command "sudo usermod -aG docker $USER" "Adding user to Docker group... "

# 单独执行newgrp,确保当前shell生效docker组权限
echo -n "Switching to docker group... "
newgrp docker &>/dev/null
echo "Done."

2. 提示用户重新登录以永久生效权限

usermod添加用户组后,只有重新登录会话才能让权限永久生效(newgrp只是临时切换当前shell的组)。在脚本末尾添加提示:

echo "Installation complete."
echo "提示:为了让Docker组权限永久生效,请注销当前会话后重新登录。"

3. 指定Minikube使用Docker驱动

启动Minikube时明确指定驱动为Docker,避免自动选择其他可能不健康的驱动:

minikube start --driver=docker

修改后的完整脚本示例

#!/bin/bash

function run_command {
    local cmd="$1"
    local spinner_text="$2"

    echo -n "$spinner_text"
    {
        eval "$cmd" &>/dev/null
    } &
    local spinner=$!

    local spin='-\|/'
    local i=0
    while kill -0 $spinner 2>/dev/null
    do
        i=$(( (i+1) %4 ))
        printf "\r$spinner_text ${spin:$i:1}"
        sleep .1
    done

    wait $spinner
    local exit_code=$?

    if [[ $exit_code != 0 ]]; then
        echo "Error: $cmd failed with exit code $exit_code."
        exit $exit_code
    fi

    echo "Done."
}

# Update package lists
run_command "apt-get update" "Updating package lists... "

# Install Docker
run_command "apt-get install -y docker.io" "Installing Docker... "

# Install Skaffold
run_command "curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin" "Installing Skaffold... "

# Install Minikube
run_command "curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin" "Installing Minikube... "

# Install kubectl
run_command "curl -LO https://storage.googleapis.com/kubernetes-release/release/\`curl -L https://storage.googleapis.com/kubernetes-release/release/stable.txt\`/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/" "Installing kubectl... "

# Add the current user to the Docker group
run_command "sudo usermod -aG docker $USER" "Adding user to Docker group... "

# Switch to docker group in current shell
echo -n "Switching to docker group... "
newgrp docker &>/dev/null
echo "Done."

# Add virtual host to /etc/hosts
run_command "echo '192.168.49.2    hcms.dev' | sudo tee -a /etc/hosts" "Adding virtual host to /etc/hosts... "

echo "Installation complete."
echo "提示:为了让Docker组权限永久生效,请注销当前会话后重新登录。"

内容的提问来源于stack exchange,提问作者Vladimer Grigalashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:11:29