簡體   English   中英

在 Kubernetes 吊艙中使用 docker 插座

[英]Using docker socket in Kubernetes pod

我想修剪docker 圖像,我使用node-docker-api編寫了一個小的 Docker 圖像,並且能夠成功地在本地對其進行測試。
由於我已將DaemonSet部署到 Kubernetes,因此 pod 無法訪問 Docker 套接字:

Error: connect EACCES /var/run/docker.sock

deployment.yaml如下所示:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    name: docker-image-cleanup
  name: docker-image-cleanup
spec:
  template:
    metadata:
      labels:
        app: docker-image-cleanup 
    spec:
      volumes:
        - name: docker-sock
          hostPath:
            path: "/var/run/docker.sock"
            type: File
        - name: docker-directory
          hostPath:
            path: "/var/lib/docker"

      containers:
        - name: docker-image-cleanup
          image: image:tag
          securityContext:
            privileged: true
          env:
            - name: PRUNE_INTERVAL_SECONDS
              value: "30"
            - name: PRUNE_DANGLING
              value: "true"
          volumeMounts:
            - mountPath: /var/run/docker.sock
              name: docker-sock
              readOnly: false
            - mountPath: "/var/lib/docker"
              name: docker-directory
              readOnly: false

運行 AKS v1.13.10 - 如果相關

不能保證您的 kubernetes 集群實際上使用 docker 作為容器引擎。 由於有許多替代方案,例如 cri-o 和 kata 容器,因此您的應用程序/部署不應對底層容器引擎做出任何假設。

Kubernetes 負責自動清理未使用的容器映像。 如果您自己運行集群,請參閱有關如何配置它的文檔: https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/

除此之外,您似乎對套接字有一個簡單的權限問題:確保您在清理容器中的應用程序以 root 身份運行或具有適當的用戶來訪問套接字。

我已將runAsUser: 0添加到容器屬性中:

containers:
  - name: docker-image-cleanup
    image: image:tag
    securityContext:
      privileged: true
      runAsUser: 0

現在它可以工作了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM