在Kubernetes中使用容器运行docker

时间:2018-11-22 16:36:00

标签: docker kubernetes dind containerd

由于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客户端可以和容器一起使用吗?

2 个答案:

答案 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作为主机路径。

相关问题:

Post-install steps for Docker on Linux