首页 > 解决方案 > 使用 containerd 在 Kubernetes 中运行 docker

问题描述

由于 K8S v1.11 运行时已从 dockerd 更改为 containerd。我在 kubernetes 上使用 Jenkins 来使用 Docker 之外的 Docker 构建 docker 映像(dood)。

当我尝试使用常规 docker 客户端切换到使用来自 conatinerd 的套接字文件(containerd/containerd.sock 映射广告 /var/run/docker.sock)时,出现以下错误Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x00\x00\x00\x04\x00\x00\x00\x00\x00".

docker客户端可以和containerd一起使用吗?

标签: dockerkubernetescontainerd

解决方案


免责声明:在撰写本文时,containerd 并未取代 Docker,您可以将 containerd与 Docker 分开安装,并且您可以将Kubernetes CRI指向直接与 containerd 套接字对话。

因此,当您安装 Docker 时,它会与 containerd 一起安装,并且Docker 守护进程会与之对话。你会看到这样的过程:

docker-containerd --config /var/run/docker/containerd/containerd.toml

但是,Docker 客户端仍然与 Docker 守护进程通信,这就是为什么当您在容器中运行 Docker 客户端时,您仍然需要直接与 Docker 守护进程 ( /var/run/docker.sock) 通信,因此您可以切换回/var/run/docker.sock并且我相信它应该可以工作。


推荐阅读