支持的容器镜像仓库

  • AWS ECR(支持 AK/SK 或 IRSA)/ Azure ACR / 阿里云 ACR / 腾讯云 TCR / Docker Hub

为什么需要配置容器镜像仓库

  • Dify 企业版需要使用容器镜像仓库来存储和管理插件镜像。
  • 插件本身不是一个 Docker 镜像,而是一个包含插件代码和元数据的压缩包。
  • 当插件部署到 Kubernetes 集群时,该压缩包会被构建成 Docker 镜像,因此必须配置容器镜像仓库。

显示 Helm Chart 值

helm show values dify/dify

以下是 Helm Chart 中的容器镜像仓库相关配置示例:

plugin_connector:
  imageRepoSecret: "image-repo-secret"
  imageRepoPrefix: "docker.io/your-image-repo-prefix"
  imageRepoType: docker
  ecrRegion: "us-east-1"

如何配置容器镜像仓库

  • imageRepoSecret(必填):这是一个 Kubernetes Secret,用于存放访问容器镜像仓库的认证信息。

    • 1.1 注意imageRepoSecret 的值必须为 image-repo-secret,该 secret 会在部署时创建。

    • 1.2 请将以下脚本保存为 generate-image-repo-secret.sh

      #!/bin/bash    
      
      if [ "$#" -lt 3 ]; then
      echo "How to use: $0 <username> <password> <k8s-namespace> <registry: optional>"
      echo "Example: $0 myuser mypass default https://index.docker.io/v1/"
      exit 1
      fi
      
      USERNAME="$1"
      PASSWORD="$2"
      NAMESPACE="$3"
      REGISTRY="${4:-https://index.docker.io/v1/}"
      OUTPUT_FILE="./config.json"
      
      AUTH=$(echo -n "$USERNAME:$PASSWORD" | base64 | tr -d '\n')
      
      cat > "$OUTPUT_FILE" <<EOF
      {
      "auths": {
          "$REGISTRY": {
          "auth": "$AUTH"
          }
      }
      }
      EOF
      
      echo "Docker config.json already generate: $OUTPUT_FILE"
      
      kubectl -n $NAMESPACE create secret generic image-repo-secret --from-file=.dockerconfigjson=$OUTPUT_FILE --from-file=config.json=$OUTPUT_FILE --type=kubernetes.io/dockerconfigjson
      
      rm "$OUTPUT_FILE"
      
    • 1.3 赋予执行权限:

      chmod +x ./generate-image-repo-secret.sh
      
    • 1.4 执行脚本以创建 Kubernetes Secret:

      # ./generate-image-repo-secret.sh <username> <password> <k8s-namespace> <registry: optional>.
      ./generate-image-repo-secret.sh myuser mypass default https://index.docker.io/v1/
      
  • imageRepoPrefix(必填):你的镜像仓库前缀,用于构建和推送插件镜像。

  • imageRepoType(必填):镜像仓库类型:

    • docker(默认):适用于 Docker Hub 或其他兼容 Docker 的仓库
    • ecr:适用于 AWS ECR
  • ecrRegion(可选):如果使用 AWS ECR,请填写所在区域。

插件 Pod 的 Kubernetes 调度配置

plugin_connector:
  nodeSelector: {}
  affinity: {}
  tolerations: []
  labels: {}
  • 插件 Pod 的调度配置(nodeSelector、affinity、tolerations、labels)继承自 plugin_connector 服务。

如何在网络受限的国家/地区进行配置

如果你的网络无法访问 docker.io,可以使用自定义的镜像仓库替代默认镜像地址。

plugin_connector:
  gatewayImage: "nginx:1.27.3"
  shaderImage: "gcr.io/kaniko-project/executor:latest"
  busyBoxImage: "busybox:latest"
  awsCliImage: "amazon/aws-cli:latest"
  generatorConf: |
    generator:
      repo: langgenius
      python:
        pipMirror: ""
        preCompile: true
        versions:
          python3.13:
            langgenius: docker.io/langgenius/plugin-build-base-python:3.13
          python3.12:
            langgenius: docker.io/langgenius/plugin-build-base-python:3.12
          python3.11:
            langgenius: docker.io/langgenius/plugin-build-base-python:3.11
          python3.10:
            langgenius: docker.io/langgenius/plugin-build-base-python:3.10
  1. 需要替换为私有镜像的镜像列表:
  • gatewayImage:插件网关服务镜像。
  • shaderImage:构建插件时使用的 shader 镜像。
  • busyBoxImage:插件运行时使用的 busybox 镜像。
  • awsCliImage:AWS CLI 工具镜像。如果未使用 AWS,可忽略此镜像。
  • python3.xx:用于构建插件的基础镜像。
  1. 将镜像同步到你的私有镜像仓库