Docker容器内核与Ubuntu主机内核不一致的原因及解决方法咨询
Docker容器内核与Ubuntu主机内核不一致的原因及解决方法咨询
嘿,我来帮你拆解这个问题!你在Ubuntu 22.04主机(内核5.19.0-35-generic)上运行Docker,拉取ubuntu:18.04镜像后,发现容器内的内核是5.15.49-linuxkit,这和你认知里“Docker容器共享主机内核”的情况不符,对吧?这其实是安装方式导致的,下面给你详细说:
原因分析
你大概率是安装了Docker Desktop for Linux,而不是原生的Docker Engine。Docker Desktop不管是在Windows、Mac还是Linux平台,本质上都是在一个基于LinuxKit的轻量虚拟机里运行Docker服务的——也就是说,你的容器其实是跑在这个虚拟机的内核上,而不是直接使用Ubuntu主机的原生内核,所以才会看到linuxkit相关的内核版本。
解决办法
如果想要容器直接使用主机的内核,你需要卸载Docker Desktop,改用原生的Docker Engine,步骤如下:
- 首先卸载Docker Desktop:
- 停止Docker Desktop服务:
systemctl --user stop docker-desktop - 执行卸载命令清理包:
sudo apt purge docker-desktop - 删除残留配置文件:
rm -r ~/.docker/desktop
- 停止Docker Desktop服务:
- 然后安装原生Docker Engine:
- 卸载旧的Docker相关残留包(如果有的话):
sudo apt-get remove docker docker-engine docker.io containerd runc - 设置Docker官方APT源:
sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg 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" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - 安装Docker Engine及配套组件:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 卸载旧的Docker相关残留包(如果有的话):
- 启动Docker服务:
sudo systemctl start docker - 此时再运行
ubuntu:18.04容器,执行uname -r就能看到和主机一致的5.19.0-35-generic内核了。
补充说明
Docker Desktop用LinuxKit虚拟机是为了提供跨平台统一的体验,还附带了图形化管理界面、文件共享优化等功能,但代价就是容器无法直接复用主机内核;而原生Docker Engine是直接与主机内核交互的,完全符合你认知中“容器共享主机内核”的特性。
备注:内容来源于stack exchange,提问作者akastack
相关产品推荐
相关产品推荐

