如何在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
相关产品推荐
相关产品推荐

