Supported tags and respective
For more information about this image and its history, please see the relevant manifest file (
library/neo4j). This image is updated via pull requests to the
docker-library/official-images GitHub repo.
What is Neo4j?
Neo4j is a highly scalable, robust, native graph database. It is used in mission-critical apps by thousands of leading startups, enterprises, and governments around the world. You can learn more here.
How to use this image
NOTE: Docker does not run natively on OSX or Windows. If you are running on one of these platforms you will need to run Docker inside a VM. Please read the Docker documentation for your platform (OSX, Windows). The instructions below include variants to cope with the difference between platforms where necessary; they assume that on OSX you have a shell set up as per the instructions linked above and that you have a Docker machine VM called
The image exposes two ports (
7473) for HTTP and HTTPS access to the Neo4j API and a volume (
/data) to allow the database to be persisted outside its container.
docker run \ --detach \ --publish=7474:7474 \ --volume=$HOME/neo4j/data:/data \ neo4j
Point your browser at
http://localhost:7474 on Linux or
http://$(docker-machine ip default):7474 on OSX.
NOTE: All the volumes in this guide are stored under
$HOME in order to work on OSX where
$HOME is automatically mounted into the machine VM. On Linux the volumes can be stored anywhere.
NOTE: By default Neo4j requires authentication. You have to login with
neo4j/neo4j at the first connection and set a new password.
The Neo4j comes in two editions: Community and Enterprise.
Neo4j Enterprise Edition is designed for commercial deployments where scale and availability are important. Use of Neo4j Enterprise Edition requires a commercial license agreement with Neo Technology. Please see Neo4j licensing for details.
Tags are available for both editions. Version-specific Enterprise tags have an
-enterprise suffix (like
neo4j:2.3.0-enterprise), Community tags have no suffix (like
neo4j:2.3.0). The latest Enterprise release is available as
File descriptor limit
Neo4j may use a large number of file descriptors if many indexes are in use or there is a large number of simultaneous database connections.
Docker controls the number of open file descriptors in a container; the limit depends on the configuration of your system. We recommend a limit of at least 40000 for running Neo4j.
To check the limit on your system, run this command:
docker run neo4j \ bash -c 'echo Soft limit: $(ulimit -Sn); echo Hard limit: $(ulimit -Hn)'
To override the default configuration for a single container, use the
--ulimit option like this:
docker run \ --detach \ --publish=7474:7474 \ --volume=$HOME/neo4j/data:/data \ --ulimit=nofile=40000:40000 neo4j
The default configuration provided by this image is intended for learning about Neo4j, but must be modified to make it suitable for production use. In particular the memory assigned to Neo4j is very limited (see
NEO4J_HEAP_MEMORY below), to allow multiple containers to be run on the same server. You can read more about configuring Neo4j in the manual.
There are three ways to modify the configuration depending on how much you need to customize the image.
Pass environment variables to the container when you run it.
docker run \ --detach \ --publish=7474:7474 \ --volume=$HOME/neo4j/data:/data \ --env=NEO4J_CACHE_MEMORY=4G \ neo4j
The following environment variables are available:
NEO4J_CACHE_MEMORY: the size of Neo4j's native-memory cache, defaults to 512M
NEO4J_HEAP_MEMORY: the size of Neo4j's heap in MB, defaults to 512
NEO4J_KEEP_LOGICAL_LOGS: the retention policy for logical logs, defaults to
NEO4J_AUTH: controls authentication, set to
noneto disable authentication or
neo4j/to override the default password (see documentation here)
NEO4J_THIRDPARTY_JAXRS_CLASSES: URI mappings for unmanaged extensions (see below)
The following settings control features that are only available in the Enterprise Edition of Neo4j.
NEO4J_DATABASE_MODE: the database mode, defaults to
SINGLE, set to
HAto create a cluster
NEO4J_SERVER_ID: the id of the server, must be unique within a cluster
NEO4J_HA_ADDRESS: the address which a server advertises to other members of a cluster in HA mode, this must be resolvable by all cluster members
NEO4J_INITIAL_HOSTS: comma-separated list of other members of the cluster
To make arbitrary modifications to the Neo4j configuration, provide the container with a
docker run \ --detach \ --publish=7474:7474 \ --volume=$HOME/neo4j/data:/data \ --volume=$HOME/neo4j/conf:/conf \ neo4j
Any configuration files in the
/conf volume will override files provided by the image. This includes values that may have been set in response to environment variables passed to the container by Docker. So if you want to change one value in a file you must ensure that the rest of the file is complete and correct.
To dump an initial set of configuration files, run the image with the
docker run --rm\ --volume=$HOME/neo4j/conf:/conf \ neo4j dump-config
Build a new image
For more complex customization of the image you can create a new image based on this one.
(This feature is only available in Neo4j Enterprise Edition.)
In order to run Neo4j in HA mode under Docker you need to wire up the containers in the cluster so that they can talk to each other. Each container must have a network route to each of the others and the
NEO4J_INITIAL_HOSTS environment variables must be set according (see above).
Within a single Docker host, this can be achieved as follows.
docker network create --driver=bridge cluster docker run --name=instance1 --detach --publish=7474:7474 --net=cluster --hostname=instance1 \ --env=NEO4J_DATABASE_MODE=HA --env=NEO4J_HA_ADDRESS=instance1 --env=NEO4J_SERVER_ID=1 \ --env=NEO4J_INITIAL_HOSTS=instance1:5001,instance2:5001,instance3:5001 \ neo4j:enterprise docker run --name=instance2 --detach --publish 7475:7474 --net=cluster --hostname=instance2 \ --env=NEO4J_DATABASE_MODE=HA --env=NEO4J_HA_ADDRESS=instance2 --env=NEO4J_SERVER_ID=2 \ --env=NEO4J_INITIAL_HOSTS=instance1:5001,instance2:5001,instance3:5001 \ neo4j:enterprise docker run --name=instance3 --detach --publish 7476:7474 --net=cluster --hostname=instance3 \ --env=NEO4J_DATABASE_MODE=HA --env=NEO4J_HA_ADDRESS=instance3 --env=NEO4J_SERVER_ID=3 \ --env=NEO4J_INITIAL_HOSTS=instance1:5001,instance2:5001,instance3:5001 \ neo4j:enterprise
Plugins and unmanaged extensions
To install a plugin or unmanaged extension, provide a
/plugins volume containing the jars. For unmanged extensions you also need to provide an environment variable specifying a URI mapping.
docker run --publish 7474:7474 --volume=$HOME/neo4j/plugins:/plugins \ --env=NEO4J_THIRDPARTY_JAXRS_CLASSES=com.example.extension=/example neo4j
See the manual for more details on plugins and unmanaged extensions.
The Neo4j shell can be run locally within a container using a command like this:
docker exec --interactive
Supported Docker versions
This image is officially supported on Docker version 1.9.1.
Support for older versions (down to 1.6) is provided on a best-effort basis.
Please see the Docker installation documentation for details on how to upgrade your Docker daemon.
Docker, Inc is the company behind the open source Docker platform and the growing Docker ecosystem of contributors, partners and adopters revolutionizing the way distributed applications are built, shipped, and run.
Copyright (c) 2014-2015 Docker, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.