kubernetes 在容器中运行docker

jjhzyzn0  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(3)|浏览(195)

我正在使用docker dind镜像并创建一个pod。当我尝试在pod中运行docker build时,我得到一个错误。

apiVersion: v1
    kind: Pod
    metadata:
      name: dockercontainer
      namespace: default
    spec:
      containers:
      - image: docker:24.0.0-rc.1-dind
        name: dockercontainer
        securityContext:
          runAsUser: 0

pod正在创建中,但是当我在pod中执行docker构建时,我得到以下错误:ERROR: Cannot connect to the docker daemon at unix://var/run/docker.sock

js81xvg6

js81xvg61#

注意:这里假设您在K8s中使用的是docker运行时!如果没有,则使用kaniko

docker守护进程没有挂载到pod中-这就是你的错误的原因。为了构建映像,您将需要以下各项之一:

  • 将docker守护进程挂载到pod的每个容器中
  • privileged模式下运行pod中的容器
apiVersion: v1
kind: Pod
metadata:
  name: dockercontainer
  namespace: default
spec:
  containers:
  - image: docker:24.0.0-rc.1-dind
    name: dockercontainer
    securityContext:
      privileged: true # this should do the trick

在K8s pod中构建/运行容器存在一些问题,从安全Angular 来看(关于herehere的更多信息)。更安全的方法是使用sysbox,但这可能比我们在这里想要的更详细。
我假设你不可能在K8之外构建这个图像。

agxfikkp

agxfikkp2#

我用你使用的图像创建了豆荚,没有遇到任何问题。请参见以下序列:

  • docker-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: docker
  labels:
    name: docker
spec:
  containers:
  - name: docker
    image: docker:24.0.0-rc.1-dind
    securityContext:
      privileged: true
  • 创建pod:

kubectl create -f /tmp/docker-pod.yml

  • 等待它运行,然后在其中运行sh

kubectl exec -it docker sh

  • docker version显示docker守护进程正在其内部运行:
/ # docker version
Client:
 Version:           24.0.0-rc.1
 API version:       1.43
 Go version:        go1.20.3
 Git commit:        eabb927
 Built:             Thu Apr 27 00:50:17 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.0-rc.1
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.3
  Git commit:       f117aef
  Built:            Thu Apr 27 00:53:29 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.0
  GitCommit:        1fbd70374134b891f97ce19c70b6e50c7b9f4e0d
 runc:
  Version:          1.1.6
  GitCommit:        v1.1.6-0-g0f48801
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • 请注意,您不需要指定
securityContext:
          runAsUser: 0

因为它是默认的用户容器,运行时使用:

/ # whoami
root
  • 但是,您需要按照其文档指示在privileged模式下运行docker in docker容器。
dddzy1tm

dddzy1tm3#

你能检查一下操作系统发行版吗?请运行此命令cat /etc/os-release。至于错误消息,看起来docker守护进程没有运行。你能运行这个命令sudo dockerd &吗?
您可以阅读更多关于dockerd here的内容。对于ArchLinux,我在这里发布了类似的答案。

相关问题