Docker

This directory contains the Dockerfiles used to build and release the official images and a docker-compose.yml file that is intended for end users to run a Mempool instance with minimal effort.

bitcoind only configuration

To run an instance with the default settings, use the following command:

$ docker-compose up

The default configuration will allow you to run Mempool using bitcoind as the backend, so address lookups will be disabled. It assumes you have added RPC credentials for the mempool user with a mempool password in your bitcoin.conf file:

rpcuser=mempool
rpcpassword=mempool

If you want to use your current credentials, update them in the docker-compose.yml file:

  api:
    environment:
      MEMPOOL_BACKEND: "none"
      RPC_HOST: "172.27.0.1"
      RPC_PORT: "8332"
      RPC_USER: "mempool"
      RPC_PASS: "mempool"

Note: the IP in the example above refers to Docker's default gateway IP address so the container can hit the bitcoind instance running on the host machine. If your setup is different, update it accordingly.

You can check if the instance is running by visiting http://localhost - the graphs will be populated as new transactions are detected.

bitcoind+romanz/electrs configuration

In order to run with romanz/electrs as the backend , in addition to the settings required for bitcoind above, you will need to make the following changes to the docker-compose.yml file:

  • Under the api service, change the value of MEMPOOL_BACKEND key from none to electrum:
  api:
    environment:
      MEMPOOL_BACKEND: "none"
  • Under the api service, set the ELECTRUM_HOST and ELECTRUM_PORT keys to your Docker host ip address and set ELECTRUM_TLS_ENABLED to false:
  api:
    environment:
      ELECTRUM_HOST: "172.27.0.1"
      ELECTRUM_PORT: "50002"
      ELECTRUM_TLS: "false"

You can update any of the backend settings in the mempool-config.json file using the following environment variables to override them.

JSON:

  "MEMPOOL": {
    "NETWORK": "mainnet",
    "BACKEND": "electrum",
    "HTTP_PORT": 8999,
    "SPAWN_CLUSTER_PROCS": 0,
    "API_URL_PREFIX": "/api/v1/",
    "POLL_RATE_MS": 2000,
    "CACHE_DIR": "./cache",
    "CLEAR_PROTECTION_MINUTES": 20,
    "RECOMMENDED_FEE_PERCENTILE": 50,
    "BLOCK_WEIGHT_UNITS": 4000000,
    "INITIAL_BLOCKS_AMOUNT": 8,
    "MEMPOOL_BLOCKS_AMOUNT": 8,
    "PRICE_FEED_UPDATE_INTERVAL": 3600,
    "USE_SECOND_NODE_FOR_MINFEE": false,
    "EXTERNAL_ASSETS": []
  },

docker-compose overrides::

      MEMPOOL_BACKEND_NETWORK: ""
      MEMPOOL_BACKEND: ""
      BACKEND_MAINNET_HTTP_PORT: ""
      MEMPOOL_SPAWN_CLUSTER_PROCS: ""
      MEMPOOL_API_URL_PREFIX: ""
      MEMPOOL_POLL_RATE_MS: ""
      CACHE_DIR: ""
      MEMPOOL_CLEAR_PROTECTION_MINUTES: ""
      MEMPOOL_RECOMMENDED_FEE_PERCENTILE: ""
      MEMPOOL_BLOCK_WEIGHT_UNITS: ""
      MEMPOOL_INITIAL_BLOCKS_AMOUNT: ""
      MEMPOOL_BLOCKS_AMOUNT: ""
      MEMPOOL_PRICE_FEED_UPDATE_INTERVAL: ""
      MEMPOOL_USE_SECOND_NODE_FOR_MINFEE: ""
      MEMPOOL_EXTERNAL_ASSETS: ""

JSON:

"CORE_RPC": {
    "HOST": "127.0.0.1",
    "PORT": 8332,
    "USERNAME": "mempool",
    "PASSWORD": "mempool"
  },

docker-compose overrides:

      RPC_HOST: ""
      RPC_PORT: ""
      RPC_USER: ""
      RPC_PASS: ""

JSON:

  "ELECTRUM": {
    "HOST": "127.0.0.1",
    "PORT": 50002,
    "TLS_ENABLED": true
  },

docker-compose overrides:

      ELECTRUM_HOST: ""
      ELECTRUM_PORT: ""
      ELECTRUM_TLS: ""

JSON:

  "ESPLORA": {
    "REST_API_URL": "http://127.0.0.1:3000"
  },

docker-compose overrides:

      ESPLORA_REST_API_URL: ""

JSON:

  "SECOND_CORE_RPC": {
    "HOST": "127.0.0.1",
    "PORT": 8332,
    "USERNAME": "mempool",
    "PASSWORD": "mempool"
  },

docker-compose overrides:

      SECOND_RPC_HOST: ""
      SECOND_RPC_PORT: ""
      SECOND_RPC_USER: ""
      SECOND_RPC_PASS: ""

JSON:

  "DATABASE": {
    "ENABLED": true,
    "HOST": "127.0.0.1",
    "PORT": 3306,
    "DATABASE": "mempool",
    "USERNAME": "mempool",
    "PASSWORD": "mempool"
  },

docker-compose overrides:

      MYSQL_ENABLED: ""
      MYSQL_HOST: ""
      MYSQL_PORT: ""
      MYSQL_DATABASE: ""
      MYSQL_USER: ""
      MYSQL_PASS: ""

JSON:

  "SYSLOG": {
    "ENABLED": true,
    "HOST": "127.0.0.1",
    "PORT": 514,
    "MIN_PRIORITY": "info",
    "FACILITY": "local7"
  },

docker-compose overrides:

      SYSLOG_ENABLED: ""
      SYSLOG_HOST: ""
      SYSLOG_PORT: ""
      SYSLOG_MIN_PRIORITY: ""
      SYSLOG_FACILITY: ""

JSON:

  "STATISTICS": {
    "ENABLED": true,
    "TX_PER_SECOND_SAMPLE_PERIOD": 150
  },

docker-compose overrides:

      STATISTICS_ENABLED: ""
      STATISTICS_TX_PER_SECOND_SAMPLE_PERIOD: ""

JSON:

  "BISQ": {
    "ENABLED": false,
    "DATA_PATH": "/bisq/statsnode-data/btc_mainnet/db"
  }

docker-compose overrides:

      BISQ_ENABLED: ""
      BISQ_DATA_PATH: ""