WSL2中Docker使用containerd时配置文件不生效问题排查
问题描述
在WSL 2环境中安装Docker Engine后,将containerd二进制文件设置为默认运行时。启动dockerd二进制文件时,系统不会自动加载/etc/docker/daemon.json与/etc/containerd/config.toml两个配置文件。
已尝试的处理方案
- 针对daemon.json不自动加载的问题,通过创建命令别名的方式指定配置文件路径,别名配置如下:
alias dockerd='sudo dockerd --config-file=/etc/docker/deamon.json'
执行dockerd命令时,该别名可以让守护进程读取指定的daemon.json配置,但始终无法找到让dockerd守护进程向containerd进程传递对应配置文件路径的方法。
当前使用的daemon.json完整配置如下:
{ "default-runtime": "containerd", "hosts": ["unix:///var/run/docker.sock"], "runtimes": { "containerd": { "path": "/usr/bin/containerd" } } }
- 尝试在配置中添加
runtimeArgs参数传入containerd配置路径,该方案未生效,对应配置片段如下:
"containerd": { "path": "/usr/bin/containerd", "runtimeArgs": [ "-c=/etc/containerd/config.toml" ] }
配置失效原因推测
containerd对参数传入顺序有明确要求:
containerd [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]
--config(简写为-c)属于containerd的全局选项,如果Docker引擎将该参数放在命令末尾传入,配置文件就会被忽略。
最优解决方向是查明默认配置文件无法被自动加载的根本原因,因暂未找到相关明确诱因,目前在探索手动传入配置文件的实现方式。
当前运行环境信息
- Docker版本信息:
$ docker version Client: Docker Engine - Community Version: 20.10.17 API version: 1.41 Go version: go1.17.11 Git commit: 100c701 Built: Mon Jun 6 23:02:46 2022 OS/Arch: linux/amd64 Context: linux Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:00:51 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.6 GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1 docker-init: Version: 0.19.0 GitCommit: de40ad0
- containerd版本信息:
$ containerd --version containerd containerd.io 1.6.6 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
- 系统内核信息:
$ uname -a Linux DESKTOP-A9K3QEG 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
- 系统发行版信息:
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"
内容的提问来源于stack exchange,提问作者agabrys
相关产品推荐
相关产品推荐

