dockerd 命令中开关 --containerd 的用途是什么?

kra*_*ave 4 docker docker-daemon

如果我运行systemctl cat docker.service查看docker.service的unit文件, ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock可以在docker默认的unit文件中找到。

我的问题是切换的目的是什么 --containerd=/run/containerd/containerd.sock

根据这个问题的答案,如果我为 docker.service 生成一个覆盖文件,内容为:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd://
Run Code Online (Sandbox Code Playgroud)

有效的配置是:

[Service]
ExecStart=/usr/bin/dockerd -H fd://
Run Code Online (Sandbox Code Playgroud)

并将--containerd=/run/containerd/containerd.sock被省略。

那么这样的配置会导致什么情况呢?我希望docker能够在启用TLS保护的情况下在本地和远程正常工作。我还需要通过 ssh 调用 docker 守护进程。

先感谢您。

lar*_*sks 6

文档的重要部分位于“ Docker 运行时执行选项”部分,其中写道:

Docker 守护进程依赖于 OCI 兼容的运行时(通过 containerd 守护进程调用)作为其与 Linux 内核命名空间、cgroup 和 SELinux 的接口。

默认情况下,Docker守护进程会自动启动containerd。如果要控制containerd启动,请手动启动containerd并使用--containerd标志将路径传递到containerd套接字。

换句话说,原始的 Docker 单元可能包括--containerd=/run/containerd/containerd.sock因为containerd是由 systemd.socket.service单元管理的。

通过从覆盖中排除该标志,我对文档的阅读是 Docker 将启动自己的containerd实例,而不是使用绑定到/run/containerd/containerd.sock.

可能无害,但最好将该标志添加到您的覆盖命令行中。