docker - 无法从私有(private) Docker 注册表中删除图像

标签 docker docker-registry

全部!!
我正在使用以下 yaml 文件在 K8S 集群中部署私有(private)注册表:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: registry
  labels:
    type: local
spec:
  capacity:
    storage: 4Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/registry/"

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: registry-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
---

apiVersion: v1
kind: Service
metadata:
  name: registry
  labels:
    app: registry
spec:
  ports:
    - port: 5000
      targetPort: 5000
      nodePort: 30400
      name: registry
  selector:
    app: registry
    tier: registry
  type: NodePort
---

apiVersion: v1
kind: Service
metadata:
  name: registry-ui
  labels:
    app: registry
spec:
  ports:
    - port: 8080
      targetPort: 8080
      name: registry
  selector:
    app: registry
    tier: registry
  type: NodePort
---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: registry
  labels:
    app: registry
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: registry
        tier: registry
    spec:
      containers:
      - image: registry:2
        name: registry
        volumeMounts:
        - name: docker
          mountPath: /var/run/docker.sock
        - name: registry-persistent-storage
          mountPath: /var/lib/registry
        ports:
        - containerPort: 5000
          name: registry

      - name: registryui
        image: hyper/docker-registry-web:latest
        ports:
        - containerPort: 8080
        env:
        - name: REGISTRY_URL
          value: http://localhost:5000/v2
        - name: REGISTRY_NAME
          value: cluster-registry
      volumes:
      - name: docker
        hostPath:
          path: /var/run/docker.sock
      - name: registry-persistent-storage
        persistentVolumeClaim:
          claimName: registry-claim

我只是想知道在将 docker 镜像推送到本地注册表后没有删除它们的选项。我在这里找到了它应该如何工作的方式:https://github.com/byrnedo/docker-reg-tool .我可以在本地存储库中列出 docker 图像,通过命令行查看所有标签,但无法删除它们。在阅读了 docker 注册表文档后,我发现注册表 docker 需要使用以下 env: REGISTRY_STORAGE_DELETE_ENABLED=true. 运行。
我试图将此变量添加到 yaml 文件中:
.........
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: registry
      labels:
        app: registry
    spec:
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: registry
            tier: registry
        spec:
          containers:
          - image: registry:2
            name: registry
            volumeMounts:
            - name: docker
              mountPath: /var/run/docker.sock
            - name: registry-persistent-storage
              mountPath: /var/lib/registry
            ports:
            - containerPort: 5000
              name: registry
            env:
            - name: REGISTRY_STORAGE_DELETE_ENABLED
              value: true

但是使用命令 kubectl apply -f manifests/registry.yaml 应用此 yaml 文件返回以下错误信息:
Deployment in version "v1beta1" cannot be handled as a Deployment: v1beta1.Deployment.Spec: v1beta1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.Containers: []v1.Container: v1.Container.Env: []v1.EnvVar: v1.EnvVar.Value: ReadString: expects " or n, but found t, error found in #10 byte of ...|,"value":true}],"ima|..., bigger context ...|"name":"REGISTRY_STORAGE_DELETE_ENABLED","value":true}],"image":"registry:2","name":"registry","port|...

在我找到另一个建议后:

The registry accepts configuration settings either via a file or via environment variables. So the environment variable REGISTRY_STORAGE_DELETE_ENABLED=true is equivalent to this in your config file:


storage:
  delete:
    enabled: true

我在我的 yaml 文件中也尝试过这个选项,但仍然没有运气......
非常感谢任何有关如何在我的 yaml 文件中启用 docker 图像删除的建议。

最佳答案

true 的值在 yaml 中被解析为 bool 数据类型,语法调用字符串。您需要明确引用它:

value: "true"

关于docker - 无法从私有(private) Docker 注册表中删除图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157183/

相关文章:

docker - 部署时如何启动新建的Docker镜像?

docker - 尝试推送到我的私有(private)存储库时,我不断收到 404 错误。为什么?

go - 使用 go-dockerclient 从自定义注册表下载图像挂起

docker - 如何使用标签名称作为正则表达式提取 docker hub 图像

docker - PULL时如何配置Docker注册表以优先于本地注册表?

docker - kubectl 在 mac 上的 docker 容器中失败,出现 "Unable to connect to the server: EOF"但在 linux 上没有

rest - Docker - 复制 JAR 文件 : no such file or directory?

reactjs - 2 ip in 1请求与docker/kubernetes上的axio

在构建时使用卷构建 Docker

docker - 在k8s进程中, “kube-controller-manager”是来自docker容器的 “child process”。为什么k8s具有这种架构?