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

如何在Docker容器中运行Minikube集群?

在Docker容器中运行Minikube的问题与解决方案

问题背景

出于测试开发需求,基于ubuntu:latest构建容器并安装Docker、Minikube与kubectl,Dockerfile如下:

FROM ubuntu:latest

RUN apt-get update

RUN apt-get install -y ca-certificates curl gnupg supervisor
RUN mkdir -p /var/log/supervisor
RUN install -m 0755 -d /etc/apt/keyrings

RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

RUN chmod a+r /etc/apt/keyrings/docker.gpg
RUN echo \
    "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
    tee /etc/apt/sources.list.d/docker.list > /dev/null

RUN apt-get update
RUN apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
RUN curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
    && chmod +x minikube
RUN cp minikube /usr/local/bin && rm minikube  

RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
RUN install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
RUN chmod +x kubectl

构建与运行命令:

docker build -f Dockerfile.ubuntu -t dindubuntu .
docker run --privileged --name dub -itd dindubuntu

容器启动后能正常运行docker run hello-world,但执行minikube start --force时出现驱动不匹配、cgroup配置错误等问题,核心错误日志:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: unable to apply cgroup configuration: failed to write 2814: write /sys/fs/cgroup/docker/dce8e8b2de225d576fdfb75a8aabb453fbe5e8890f284ea008c7701694979915/cgroup.procs: no such file or directory: unknown.

解决方案

这种部署方式是可行的,只需调整cgroup配置、存储驱动与Minikube驱动选择:

1. 修正Dockerfile,添加必要依赖

在Dockerfile中添加conntrack安装(none驱动运行Minikube必需):

RUN apt-get install -y conntrack

2. 调整外层容器启动参数

启动容器时需挂载cgroup并共享cgroup命名空间,解决cgroup配置错误:

docker run --privileged --name dub -itd \
  -v /sys/fs/cgroup:/sys/fs/cgroup:rw \
  --cgroupns=host \
  dindubuntu

3. 启动Docker时指定overlay2存储驱动

进入容器后,启动dockerd时切换到overlay2驱动(避免vfs性能与兼容性问题):

dockerd --storage-driver=overlay2 &

4. 使用none驱动启动Minikube

在容器内嵌套Docker运行Minikube容易出问题,推荐直接使用none驱动(利用外层容器内核运行K8s组件):

# 先清理残留集群
minikube delete
# 启动Minikube
minikube start --driver=none --force

关键说明

  • --cgroupns=host与挂载/sys/fs/cgroup:让内层容器能正确访问cgroup资源,解决启动时的cgroup写入错误。
  • overlay2存储驱动:替换vfs驱动,提升性能并避免部分兼容性问题。
  • none驱动:无需嵌套Docker,直接复用外层容器的内核与资源,更适合容器内运行Minikube的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:35:01