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_IMAGEof the following Neo4jVersions, wheredeprecatedis 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































