New to KubeDB? Please start here.

Using Private Docker Registry

KubeDB supports using private Docker registries. This tutorial will show you how to run KubeDB managed Neo4j database using private Docker images.

Before You Begin

At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using kind.

To keep things isolated, this tutorial uses a separate namespace called demo throughout this tutorial.

$ kubectl create ns demo
namespace/demo created

Prepare Private Docker Registry

  • You will also need a docker private registry or private repository.

  • Push the required images from KubeDB’s Docker hub account into your private registry. For Neo4j, push the DB_IMAGE of the following Neo4jVersions, where deprecated is not true.

    $ kubectl get neo4jversions -o=custom-columns=NAME:.metadata.name,VERSION:.spec.version,DB_IMAGE:.spec.db.image,DEPRECATED:.spec.deprecated
    NAME      VERSION   DB_IMAGE                       DEPRECATED
    2025.11.2 2025.11.2 kubedb/neo4j:2025.11.2         <none>
    

Create ImagePullSecret

Run the following command to create an image pull secret for your private Docker registry:

$ kubectl create secret docker-registry -n demo myregistrykey \
  --docker-server=DOCKER_REGISTRY_SERVER \
  --docker-username=DOCKER_USER \
  --docker-email=DOCKER_EMAIL \
  --docker-password=DOCKER_PASSWORD
secret/myregistrykey created

Install KubeDB Operator

Follow the steps to install KubeDB operator properly in cluster so that it points to the DOCKER_REGISTRY you wish to pull images from.

Create Neo4jVersion CRD

Create a Neo4jVersion CRD specifying images from your private registry. Replace PRIVATE_REGISTRY with your private registry.

apiVersion: catalog.kubedb.com/v1alpha1
kind: Neo4jVersion
metadata:
  name: "2025.11.2"
spec:
  db:
    image: PRIVATE_REGISTRY/neo4j:2025.11.2
  version: "2025.11.2"
$ kubectl apply -f pvt-neo4jversion.yaml
neo4jversion.catalog.kubedb.com/2025.11.2 created

Deploy Neo4j from Private Registry

apiVersion: kubedb.com/v1alpha2
kind: Neo4j
metadata:
  name: pvt-reg-neo4j
  namespace: demo
spec:
  version: "2025.11.2"
  replicas: 3
  storageType: Durable
  storage:
    storageClassName: "standard"
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 2Gi
  podTemplate:
    spec:
      imagePullSecrets:
      - name: myregistrykey
  deletionPolicy: WipeOut
$ kubectl create -f https://github.com/kubedb/docs/raw/v2026.4.27/docs/examples/neo4j/private-registry/pvt-reg-neo4j.yaml
neo4j.kubedb.com/pvt-reg-neo4j created

Check that the Neo4j is in Running state:

$ kubectl get pods -n demo --selector="app.kubernetes.io/instance=pvt-reg-neo4j"
NAME               READY   STATUS    RESTARTS   AGE
pvt-reg-neo4j-0    1/1     Running   0          3m

Cleaning up

To cleanup the Kubernetes resources created by this tutorial, run:

kubectl patch -n demo neo4j/pvt-reg-neo4j -p '{"spec":{"deletionPolicy":"WipeOut"}}' --type="merge"
kubectl delete -n demo neo4j/pvt-reg-neo4j
kubectl delete ns demo