在 Kubernetes pod 中使用 docker 套接字
Using docker socket in Kubernetes pod
我想要 prune 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 容器,您的 application/deployment 不应对底层容器引擎做出任何假设。
Kubernetes 负责自动清理未使用的容器镜像。如果您自己 运行 集群,请参阅有关如何配置它的文档:https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/
除此之外,您似乎对套接字有一个简单的权限问题:确保您在清理容器中的应用程序 运行s 是 root 或具有适当的用户来访问套接字。
我已将 runAsUser: 0
添加到容器属性中:
containers:
- name: docker-image-cleanup
image: image:tag
securityContext:
privileged: true
runAsUser: 0
现在可以了
我想要 prune 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 容器,您的 application/deployment 不应对底层容器引擎做出任何假设。
Kubernetes 负责自动清理未使用的容器镜像。如果您自己 运行 集群,请参阅有关如何配置它的文档:https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/
除此之外,您似乎对套接字有一个简单的权限问题:确保您在清理容器中的应用程序 运行s 是 root 或具有适当的用户来访问套接字。
我已将 runAsUser: 0
添加到容器属性中:
containers:
- name: docker-image-cleanup
image: image:tag
securityContext:
privileged: true
runAsUser: 0
现在可以了