在银河麒麟V10系统上成功安装Docker后,如果发现容器无法正常启动或功能受限,先别急着怀疑是系统兼容性问题。实际上,问题往往源于环境配置——例如守护进程参数未调优、存储驱动不兼容,或者cgroup版本未正确匹配。以下方法能帮你彻底理顺Docker运行环境。
一、配置Docker守护进程(daemon.json)
要让容器在银河麒麟V10的内核环境下稳定运行,首先需要正确设置Docker守护进程的配置文件。该文件相当于Docker的“总控台”,镜像仓库地址、日志策略、存储驱动等核心参数均在此定义。
1、创建Docker配置目录(若不存在):
sudo mkdir -p /etc/docker
2、使用文本编辑器新建或编辑配置文件:
sudo vim /etc/docker/daemon.json
3、写入标准适配配置(适用于Kylin V10 aarch64/x86_64架构及4.19+内核):
{
“storage-driver”: “overlay2”,
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “10m”,
“max-file”: “3”
},
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”],
“exec-opts”: [“native.cgroupdriver=systemd”]
}
4、保存退出后重载Docker守护进程:
sudo systemctl daemon-reload
5、重启Docker服务以应用新配置:
sudo systemctl restart docker
二、启用并验证overlay2存储驱动
overlay2是银河麒麟V10官方推荐的容器存储驱动,它依赖内核的overlay模块,并对底层文件系统有特定要求。若此步骤未正确配置,拉取镜像或启动容器时很可能出现错误提示。
1、检查overlay内核模块是否已加载:
lsmod | grep overlay
2、若无输出,手动加载模块:
sudo modprobe overlay
3、确保开机自动加载,创建配置文件:
echo “overlay” | sudo tee /etc/modules-load.d/overlay.conf
4、验证文件系统是否支持xfs(/var/lib/docker所在分区):
df -T /var/lib/docker | awk ‘NR==2 {print $2}’
5、若返回ext4,需确认内核支持overlay2 on ext4(Kylin V10 SP1+内核4.19.90及以上已原生支持),否则必须将/var/lib/docker挂载到xfs格式分区
三、配置cgroup v2兼容模式
银河麒麟V10默认启用cgroup v2,但部分旧版本Docker二进制包仅支持cgroup v1。若遇到“cgroup controller not found”这类错误,需手动开启v1兼容支持。
1、编辑GRUB配置文件:
sudo vim /etc/default/grub
2、在GRUB_CMDLINE_LINUX行末尾添加参数:
systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller=1
3、更新GRUB配置:
sudo update-grub
4、重启系统使内核参数生效:
sudo reboot
5、重启后验证cgroup版本:
cat /proc/1/cgroup | head -1 | cut -d: -f3 | grep -q “/” && echo “cgroup v1 active” || echo “cgroup v2 only”
四、配置非root用户容器执行权限
每次执行docker命令都加上sudo,既麻烦也存在安全隐患。正确做法是将日常使用的用户加入docker组,这直接关系容器环境的易用性与安全边界。
1、创建docker用户组(如不存在):
sudo groupadd docker
2、将当前用户加入docker组:
sudo usermod -aG docker $USER
3、刷新组权限(无需登出):
newgrp docker
4、验证权限是否生效:
docker run --rm hello-world
5、若提示“permission denied”,请确认/var/run/docker.sock文件属组为docker且权限为srw-rw----
五、配置Containerd作为默认运行时
从Docker 20.10版本起,Containerd已成为默认容器运行时。在银河麒麟V10中显式配置它,不仅能提升容器启动速度,还能增强资源隔离的稳定性,尤其适合运行.NET、Java等对CPU和内存控制精度要求较高的应用。
1、确认Containerd已安装并运行:
sudo systemctl status containerd
2、编辑Docker守护进程配置,指定运行时路径:
sudo vim /etc/docker/daemon.json
3、在原有配置中追加runtimes字段:
“runtimes”: {
“io.containerd.runc.v2”: {
“path”: “/usr/bin/runc”
}
},
“default-runtime”: “io.containerd.runc.v2”
4、重启Docker服务:
sudo systemctl restart docker
5、验证运行时类型:
docker info | grep “Default Runtime”
