Set Up BigchainDB Node Using Docker

You need to have recent versions of Docker and (Docker) Compose.

Build the images:

docker-compose build

Docker with MongoDB

Start MongoDB:

docker-compose up -d mdb

MongoDB should now be up and running. You can check the port binding for the MongoDB driver port using:

$ docker-compose port mdb 27017

Start a BigchainDB node:

docker-compose up -d bdb

You can monitor the logs:

docker-compose logs -f bdb

If you wish to run the tests:

docker-compose run --rm bdb py.test -v --database-backend=mongodb

Docker with RethinkDB

Note: If you’re upgrading BigchainDB and have previously already built the images, you may need to rebuild them after the upgrade to install any new dependencies.

Start RethinkDB:

docker-compose -f docker-compose.rdb.yml up -d rdb

The RethinkDB web interface should be accessible at http://localhost:58080/. Depending on which platform, and/or how you are running docker, you may need to change localhost for the ip of the machine that is running docker. As a dummy example, if the ip of that machine was 0.0.0.0, you would access the web interface at: http://0.0.0.0:58080/.

Start a BigchainDB node:

docker-compose -f docker-compose.rdb.yml up -d bdb-rdb

You can monitor the logs:

docker-compose -f docker-compose.rdb.yml logs -f bdb-rdb

If you wish to run the tests:

docker-compose -f docker-compose.rdb.yml run --rm bdb-rdb pytest -v -n auto

Accessing the HTTP API

You can do quick check to make sure that the BigchainDB server API is operational:

curl $(docker-compose port bdb 9984)

The result should be a JSON object (inside braces like { }) containing the name of the software (“BigchainDB”), the version of BigchainDB, the node’s public key, and other information.

How does the above curl command work? Inside the Docker container, BigchainDB exposes the HTTP API on port 9984. First we get the public port where that port is bound:

docker-compose port bdb 9984

The port binding will change whenever you stop/restart the bdb service. You should get an output similar to:

0.0.0.0:32772

but with a port different from 32772.

Knowing the public port we can now perform a simple GET operation against the root:

curl 0.0.0.0:32772