由于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客户端可以和容器一起使用吗?
答案 0 :(得分:1)
免责声明:在撰写本文时,容器化还没有取代Docker,您可以install containerd与Docker分开,并且可以指向Kubernetes CRI直接与容器化套接字通信。
因此,当您安装Docker时,它确实会与containerd一起安装,并且 Docker守护程序与之对话。您会看到这样的过程:
docker-containerd --config /var/run/docker/containerd/containerd.toml
但是,Docker客户端仍然与Docker守护进程进行对话,因此,当您在容器中运行Docker客户端时,仍然需要直接与Docker守护进程(/var/run/docker.sock
)进行对话,因此可以切换回/var/run/docker.sock
,我相信它应该可以工作。
答案 1 :(得分:0)
至少在Ubuntu 20.04上使用MicroK8s 1.18时,我发现此问题的解决方法是将Docker与Kubernetes一起显式安装。
类似的步骤应适用于其他不包含Docker的Kubernetes发行版。
安装microk8s
之后,您可以执行以下操作来安装Docker:
# Shut down microk8s
sudo snap disable microk8s
# Assuming no Docker installed yet - this fixes the case
# where Kubernetes results in this path being a directory
rm -rf /var/run/docker.sock
sudo apt-get install docker.io
ls -l /var/run/docker.sock
# Output should show socket not directory:
# srw-rw---- 1 root docker 0 Aug 6 11:50 /var/run/docker.sock
# (See https://docs.docker.com/engine/install/linux-postinstall/ for usermod + newgrp commands at this point)
# Restart microk8s
sudo snap enable microk8s
其他Kubernetes发行版可能具有不同的方式来更选择性地关闭进程。
journalctl -xe
对于在此处查看Docker或Kubernetes的任何错误很有用。
在Kubernetes清单中,安装docker.sock时请确保使用/var/run/docker.sock
作为主机路径。
相关问题: