{"id":18123325,"url":"https://github.com/jay-johnson/datanode","last_synced_at":"2026-05-06T04:04:01.364Z","repository":{"id":72596154,"uuid":"80689427","full_name":"jay-johnson/datanode","owner":"jay-johnson","description":"A python 2 container runtime for processing data science tasks and workloads (used by https://github.com/jay-johnson/sci-pype for distributed analysis)","archived":false,"fork":false,"pushed_at":"2017-03-13T18:59:57.000Z","size":191,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-13T07:52:46.326Z","etag":null,"topics":["backend-services","data-science","devops-for-data-science","docker","docker-x11","machine-learning","pandas","predictive-analysis","python-2","redis","s3","seaborn","worker-service","xgb","xgboost"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jay-johnson.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-02T03:22:47.000Z","updated_at":"2017-03-03T11:54:31.000Z","dependencies_parsed_at":"2023-05-24T15:15:09.538Z","dependency_job_id":null,"html_url":"https://github.com/jay-johnson/datanode","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jay-johnson/datanode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jay-johnson%2Fdatanode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jay-johnson%2Fdatanode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jay-johnson%2Fdatanode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jay-johnson%2Fdatanode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jay-johnson","download_url":"https://codeload.github.com/jay-johnson/datanode/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jay-johnson%2Fdatanode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32677933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T02:33:58.958Z","status":"ssl_error","status_checked_at":"2026-05-06T02:33:39.611Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend-services","data-science","devops-for-data-science","docker","docker-x11","machine-learning","pandas","predictive-analysis","python-2","redis","s3","seaborn","worker-service","xgb","xgboost"],"created_at":"2024-11-01T07:09:16.642Z","updated_at":"2026-05-06T04:04:01.335Z","avatar_url":"https://github.com/jay-johnson.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"========\nDataNode\n========\n\nA python 2 container runtime for processing data science tasks and workloads. This repository builds a large (``~3.4 gb``) docker container hosting a virtual environment with a large number of data science pips installed. It is a no-ui backend processing workhorse for my https://github.com/jay-johnson/sci-pype analysis and tasks.\n\nI use this repository as a python 2 runtime with docker-compose to mount source, data, binaries, and third party libraries into known, pre-configured locations. \n\nBuild\n=====\n\nThis repository can run in a container or by installing the virtual environment locally (it will take some time and there are a lot of dependencies).\n\nBuild the Local Virtual Environment\n-----------------------------------\n\nHere's how to run this locally inside a virtual environment:\n\n#.  Start Setup\n\n    ::\n\n        datanode $ ./setup-venv.sh \n        2017-02-01 20:59:16 Creating VirtualEnv(./dn-dev)\n        New python executable in ./dn-dev/bin/python\n        Installing setuptools, pip, wheel...done.\n        2017-02-01 20:59:17 Activating ./dn-dev/bin/activate\n        2017-02-01 20:59:17 Done Activating VirtualEnv\n        2017-02-01 20:59:17 Install Python 2 Pips into VirtualEnv\n        Installing newest pip\n\n        logs and lots of waiting for many minutes...\n\n        more logs\n\n\n        ---------------------------------------------------------\n        Activate the new DataNode virtualenv with:\n\n        source ./local-venv.sh\n        datanode $ \n\n#.  Load the Virtual Environment\n\n    ::\n\n        datanode $ source ./local-venv.sh \n        (dn-dev) datanode$ \n\n#.  Setup the /opt/work symlink \n\n    When running outside docker, I find it easiest to just symlink the repo's base dir to ``/opt/work`` to emulate the container's internal directory deployment structure. In a future release, a local-properties.sh file will set all the environment variables relative to the repository, but for now this works.\n    \n    ::\n\n        datanode$ ln -s $(pwd) /opt/work\n\n#.  Confirm the symlink is setup\n\n    ::\n\n        datanode$ ll /opt/work\n        lrwxrwxrwx 1 driver driver 32 Mar  6 22:38 /opt/work -\u003e /home/driver/dev/datanode/\n        datanode$ \n\nBuild the Docker Container\n--------------------------\n\nHere's how to build, start, and stop the Docker container:\n\n#.  Build\n\n    ::\n\n        datanode $ ./build.sh\n\n#.  Start the DataNode Container\n\n    ::\n\n        datanode $ ./start.sh \n        Starting new Docker Compose(./compose-local.yml)\n        Creating datanode\n        datanode $ \n\n#.  SSH into the DataNode Container\n\n    ::\n\n        datanode $ ./ssh.sh\n        SSH-ing into Docker image(datanode)\n        (venv)root:/opt/work# \n\n#.  Examine the DataNode Container Startup Sequence\n\n    ::\n\n        (venv)root:/opt/work# cat /tmp/container.log \n        2017-02-02 07:07:38 Starting Container\n        Thu Feb  2 07:07:38 UTC 2017\n        2017-02-02 07:07:38 \n        2017-02-02 07:07:38 Activating Virtual Env\n        2017-02-02 07:07:38 Starting Services\n        2017-02-02 07:07:38 Starting Custom Script(/opt/tools/custom-pre-start.sh)\n        2017-02-02 07:07:38 Running Custom Pre-Start\n        2017-02-02 07:07:38 Done Custom Pre-Start\n        2017-02-02 07:07:38 Done Custom Script(/opt/tools/custom-pre-start.sh)\n        2017-02-02 07:07:38 Running PreStart(/opt/tools/pre-start.sh)\n        2017-02-02 07:07:38 Running Pre-Start\n        2017-02-02 07:07:38 Done Pre-Start\n        2017-02-02 07:07:38 Done Running PreStart(/opt/tools/pre-start.sh)\n        2017-02-02 07:07:38 Running Start(/opt/tools/start-services.sh)\n        2017-02-02 07:07:38 Starting Sevices\n        2017-02-02 07:07:38 Done Starting Services\n        2017-02-02 07:07:38 Done Running Start(/opt/tools/start-services.sh)\n        2017-02-02 07:07:38 Running PostStart(/opt/tools/post-start.sh)\n        2017-02-02 07:07:38 Running Post-Start\n        2017-02-02 07:07:38 Done Post-Start\n        2017-02-02 07:07:38 Done Running PostStart(/opt/tools/post-start.sh)\n        2017-02-02 07:07:38 Done Starting Services\n        2017-02-02 07:07:38 Preventing the container from exiting\n        (venv)root:/opt/work# \n\n#.  Checkout the Empty Images Directory\n\n    ::\n\n        (venv)root:/opt/work# ls data/src/\n        iris.csv  spy.csv\n        (venv)root:/opt/work# \n\n#.  Run an IRIS XGB Regression Analysis and Cache it in the Redis Labs Cloud\n\n    ::\n\n        (venv)root:/opt/work# ./bins/ml/demo-rl-regressor-iris.py\n        Processing ML Predictions for CSV(/opt/work/data/src/iris.csv)\n        Loading CSV(/opt/work/data/src/iris.csv)\n        ds: 2017-02-02 08:12:13 BuildModels for TargetColumns(5)\n        ds: 2017-02-02 08:12:13 BuildModels for TargetColumns(5)\n        ds: 2017-02-02 08:12:13 Build Processing(0/5) Algo(SepalLength)\n        ds: 2017-02-02 08:12:13 Build Processing(0/5) Algo(SepalLength)\n        Build Processing(0/5) Algo(SepalLength)\n        Loading CSV(/opt/work/data/src/iris.csv)\n        Counting Samples from Mask\n        Counting Predictions from Mask\n\n        more logs...\n\n        -----------------------------------------------------\n        Creating Analysis Visualizations\n        Plotting Feature Importance\n        /venv/lib/python2.7/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to DejaVu Sans\n        (prop.get_family(), self.defaultFamily[fontext]))\n        Plotting PairPlots\n        Plotting Confusion Matrices\n        /venv/lib/python2.7/site-packages/matplotlib/cbook.py:136: MatplotlibDeprecationWarning: The finance module has been deprecated in mpl 2.0 and will be removed in mpl 2.2. Please use the module mpl_finance instead.\n        warnings.warn(message, mplDeprecation, stacklevel=1)\n        Plotting Scatters\n        Plotting JointPlots\n        Done Creating Analysis Visualizations\n        -----------------------------------------------------\n\n        Analysis Complete Saved Images(12)\n\n        (venv)root:/opt/work# \n\n#.  Checkout the Analyzed IRIS Images\n\n    After the analysis completes it will save the artifact image files to ``/opt/work/data/src/``. This directory is setup as a mounted volume from the host inside the `compose-local.yml`_ docker compose file (the machine learning artifacts are available outside the Docker container).\n\n    ::\n\n        (venv)root:/opt/work# ls /opt/work/data/src/\n        featimp_IRIS_REGRESSOR.png      jointplot_IRIS_REGRESSOR_3.png  scatter_IRIS_REGRESSOR_2.png\n        iris.csv                        jointplot_IRIS_REGRESSOR_4.png  scatter_IRIS_REGRESSOR_3.png\n        jointplot_IRIS_REGRESSOR_0.png  pairplot_IRIS_REGRESSOR.png     scatter_IRIS_REGRESSOR_4.png\n        jointplot_IRIS_REGRESSOR_1.png  scatter_IRIS_REGRESSOR_0.png    spy.csv\n        jointplot_IRIS_REGRESSOR_2.png  scatter_IRIS_REGRESSOR_1.png\n        (venv)root:/opt/work# \n\n#.  Exit the DataNode Container\n\n    ::\n\n        (venv)root:/opt/work# exit\n        exit\n        datanode $ \n\n#.  Stop the DataNode Container\n\n    ::\n\n        datanode $ ./stop.sh\n        Stopping Docker image(docker.io/jayjohnson/datanode)\n        Stopping datanode ... done\n        Removing datanode ... done\n        datanode $ \n\n\nViewing Plots over X11\n----------------------\n\nIf your system supports X11 forwarding with Docker, you can try the `plots-start.sh`_ script that loads the `compose-x11-local.yml`_ for exposing your user's X11 session into the container. If your system does not show the image plots, it may be permissions on the host's X11 server that need to be changed with: ``xhost +``. If that still does not work, please refer to the posts I used to set this up the first time on my Fedora 24 host:\n\nhttp://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container\nhttp://stackoverflow.com/questions/3453188/matplotlib-display-plot-on-a-remote-machine\nhttp://stackoverflow.com/questions/4931376/generating-matplotlib-graphs-without-a-running-x-server\nhttp://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/\n\n#.  Start the Container for viewing Generated Plots\n\n    ::\n\n        datanode $ ./plots-start.sh \n        Starting new Docker Compose(./compose-x11-local.yml)\n        Creating datanode\n        datanode $ \n\n#.  SSH into the Container\n\n    ::\n\n        datanode $ ./ssh.sh \n        SSH-ing into Docker image(datanode)\n        (venv)root:/opt/work#\n\n#.  Run the IRIS XGB Regression and Review the Plots\n\n    With X11 setup correctly, the images should look like the ones in the Sci-pype `Redis Labs Predict From Cached XGB IPython notebook`_\n\n    ::\n\n        (venv)root:/opt/work# ./bins/ml/demo-rl-regressor-iris.py \n        Processing ML Predictions for CSV(/opt/work/data/src/iris.csv)\n        Loading CSV(/opt/work/data/src/iris.csv)\n        ds: 2017-02-02 08:24:07 BuildModels for TargetColumns(5)\n        ds: 2017-02-02 08:24:07 BuildModels for TargetColumns(5)\n        ds: 2017-02-02 08:24:07 Build Processing(0/5) Algo(SepalLength)\n        ds: 2017-02-02 08:24:07 Build Processing(0/5) Algo(SepalLength)\n        Build Processing(0/5) Algo(SepalLength)\n        Loading CSV(/opt/work/data/src/iris.csv)\n        Counting Samples from Mask\n        Counting Predictions from Mask\n        Done Counting Samples(149) Predictions(150)\n\n        more logs...\n\n        Done Caching Models\n        -----------------------------------------------------\n        Creating Analysis Visualizations\n        Plotting Feature Importance\n        /venv/lib/python2.7/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to DejaVu Sans\n        (prop.get_family(), self.defaultFamily[fontext]))\n        Plotting PairPlots\n        Plotting Confusion Matrices\n        /venv/lib/python2.7/site-packages/matplotlib/cbook.py:136: MatplotlibDeprecationWarning: The finance module has been deprecated in mpl 2.0 and will be removed in mpl 2.2. Please use the module mpl_finance instead.\n        warnings.warn(message, mplDeprecation, stacklevel=1)\n        Plotting Scatters\n        Plotting JointPlots\n        Done Creating Analysis Visualizations\n        -----------------------------------------------------\n\n        Analysis Complete Saved Images(12)\n\n        (venv)root:/opt/work# \n\n#.  Stop the DataNode Container\n\n    ::\n\n        datanode $ ./stop.sh\n        Stopping Docker image(docker.io/jayjohnson/datanode)\n        Stopping datanode ... done\n        Removing datanode ... done\n        datanode $ \n\nMore Command Line Examples\n==========================\n\nMost of the notebooks and command line tools require running with a redis server listening on port 6000 (``\u003crepo base dir\u003e/dev-start.sh`` will start one). The command line versions that do not require docker or Jupyter can be found:\n\n::\n    \n    \u003crepo base dir\u003e\n    ├── bins\n    │   ├── demo-running-locally.py - Simple validate env is working test\n    │   ├── ml\n    │   │   ├── builders - Build and Train Models then Analyze Predictions without display any plotted images (automation examples)\n    │   │   │   ├── build-classifier-iris.py\n    │   │   │   ├── build-regressor-iris.py\n    │   │   │   ├── rl-build-regressor-iris.py\n    │   │   │   └── secure-rl-build-regressor-iris.py\n    │   │   ├── demo-ml-classifier-iris.py - Command line version of: ML-IRIS-Analysis-Workflow-Classification.ipynb\n    │   │   ├── demo-ml-regressor-iris.py - Command line version of: ML-IRIS-Analysis-Workflow-Regression.ipynb\n    │   │   ├── demo-rl-regressor-iris.py - Command line version of: ML-IRIS-Redis-Labs-Cache-XGB-Regressors.ipynb\n    │   │   ├── demo-secure-ml-regressor-iris.py - Demo with a Password-Required Redis Server running locally\n    │   │   ├── demo-secure-rl-regressor-iris.py - Demo with a Password-Required Redis Labs Cloud endpoint\n    │   │   ├── downloaders\n    │   │   │   ├── download_boston_house_prices.py\n    │   │   │   └── download_iris.py - Command line tool for downloading + preparing the IRIS dataset\n    │   │   ├── extractors\n    │   │   │   ├── extract_and_upload_iris_classifier.py - Command line version of: ML-IRIS-Extract-Models-From-Cache.ipynb (Classifier)\n    │   │   │   ├── extract_and_upload_iris_regressor.py - Command line version of: ML-IRIS-Extract-Models-From-Cache.ipynb (Regressor)\n    │   │   │   ├── rl_extract_and_upload_iris_regressor.py - Command line version of:  ML-IRIS-Redis-Labs-Extract-From-Cache.ipynb\n    │   │   │   └── secure_rl_extract_and_upload_iris_regressor.py - Command line version with a password for: ML-IRIS-Redis-Labs-Extract-From-Cache.ipynb \n    │   │   ├── importers\n    │   │   │   ├── import_iris_classifier.py - ML-IRIS-Import-and-Cache-Models-From-S3.ipynb (Classifier)\n    │   │   │   ├── import_iris_regressor.py - ML-IRIS-Import-and-Cache-Models-From-S3.ipynb (Regressor)\n    │   │   │   ├── rl_import_iris_regressor.py - Command line version of: ML-IRIS-Redis-Labs-Import-From-S3.ipynb\n    │   │   │   └── secure_rl_import_iris_regressor.py - Command line version with a password for: ML-IRIS-Redis-Labs-Import-From-S3.ipynb\n    │   │   └── predictors\n    │   │       ├── predict-from-cache-iris-classifier.py - ML-IRIS-Predict-From-Cache-for-New-Predictions-and-Analysis-Classifier.ipynb (Classifier)\n    │   │       ├── predict-from-cache-iris-regressor.py - ML-IRIS-Predict-From-Cache-for-New-Predictions-and-Analysis-Regressor.ipynb (Regressor)\n    │   │       ├── rl-predict-from-cache-iris-regressor.py - Command line version of: ML-IRIS-Redis-Labs-Predict-From-Cached-XGB.ipynb\n    │   │       └── secure-rl-predict-from-cache-iris-regressor.py - Command line version with a password for: ML-IRIS-Redis-Labs-Predict-From-Cached-XGB.ipynb\n\nAuthenticated Redis Examples\n============================\n\nYou can lock redis down with a password by setting it in the redis.conf before starting the redis server (https://redis.io/topics/security#authentication-feature). Here is how to use the machine learning API with a password-locked Redis Labs endpoint or a local one.\n\nEnvironment Variables\n---------------------\n\nIf you are running datanode in a docker container it will load the following env vars to ensure the redis application system's clients are setup with the password and database:\n\n::\n\n    # Redis Password where Empty = No Password like:\n    # ENV_REDIS_PASSWORD=\n    ENV_REDIS_PASSWORD=2603648a854c4f3ba7c93e8449319380\n    ENV_REDIS_DB_ID=0\n\nYou can run without a password by either not defining the ``ENV_REDIS_PASSWORD`` environment variable or `making it set to an empty string`_.\n\n.. _making it set to an empty string: https://github.com/jay-johnson/datanode/blob/f037c78ea9cd58875e7887db1a552815abf70d3d/src/connectors/redis/base_redis_application.py#L18-L21\n\nUsing a Password-locked Redis Labs Cloud endpoint\n-------------------------------------------------\n\n#.  Run the Secure Redis Labs Cloud Demo\n\n    ::\n\n        bins/ml$ ./demo-secure-rl-regressor-iris.py\n\n#.  Connect to the Redis Labs Cloud endpoint\n\n    After running it you can verify the models were stored on the secured endpoint:\n\n    ::\n\n        $ redis-cli -h pub-redis-12515.us-west-2-1.1.ec2.garantiadata.com -p 12515\n\n#.  Verify the server is enforcing the password\n\n    ::\n\n        pub-redis-12515.us-west-2-1.1.ec2.garantiadata.com:12515\u003e KEYS *\n        (error) NOAUTH Authentication required\n\n#.  Authenticate with the password\n\n    ::\n\n        pub-redis-12515.us-west-2-1.1.ec2.garantiadata.com:12515\u003e auth 2603648a854c4f3ba7c93e8449319380\n        OK\n\n#.  View the redis keys\n\n    ::\n\n        pub-redis-12515.us-west-2-1.1.ec2.garantiadata.com:12515\u003e KEYS *\n        1) \"_MD_IRIS_REGRESSOR_PetalWidth\"\n        2) \"_MD_IRIS_REGRESSOR_PredictionsDF\"\n        3) \"_MD_IRIS_REGRESSOR_SepalWidth\"\n        4) \"_MODELS_IRIS_REGRESSOR_LATEST\"\n        5) \"_MD_IRIS_REGRESSOR_ResultTargetValue\"\n        6) \"_MD_IRIS_REGRESSOR_Accuracy\"\n        7) \"_MD_IRIS_REGRESSOR_PetalLength\"\n        8) \"_MD_IRIS_REGRESSOR_SepalLength\"\n        pub-redis-12515.us-west-2-1.1.ec2.garantiadata.com:12515\u003e exit\n        bins/ml$\n\nLocal\n-----\n\n#.  You can run a password-locked, standalone redis server with docker compose using this script:\n        \n    https://github.com/jay-johnson/datanode/blob/master/bins/redis/auth-start.sh\n\n#.  Once the redis server is started you can run the local secure demo with the script:\n\n    ::\n\n        bins/ml$ ./demo-secure-ml-regressor-iris.py\n\n#.  After the demo finishes you can authenticate with the local redis server and view the cached models:\n\n    ::\n\n        bins/ml$ redis-cli -p 6400\n        127.0.0.1:6400\u003e KEYS *\n        (error) NOAUTH Authentication required.\n        127.0.0.1:6400\u003e AUTH 2603648a854c4f3ba7c93e8449319380\n        OK\n        127.0.0.1:6400\u003e KEYS *\n        1) \"_MD_IRIS_REGRESSOR_PetalWidth\"\n        2) \"_MD_IRIS_REGRESSOR_PetalLength\"\n        3) \"_MD_IRIS_REGRESSOR_PredictionsDF\"\n        4) \"_MD_IRIS_REGRESSOR_SepalWidth\"\n        5) \"_MODELS_IRIS_REGRESSOR_LATEST\"\n        6) \"_MD_IRIS_REGRESSOR_Accuracy\"\n        7) \"_MD_IRIS_REGRESSOR_ResultTargetValue\"\n        8) \"_MD_IRIS_REGRESSOR_SepalLength\"\n        127.0.0.1:6400\u003e exit\n        bins/ml$ \n    \n#.  If you want to stop the redis server run:\n\n    https://github.com/jay-johnson/datanode/blob/master/bins/redis/stop.sh\n\nAction Hooks\n------------\n\nThis repository is used with a volume-based deployment methodology at runtime. To keep this generic, it allows the developer to extend the following actions to control the container's initialization events. The `start-container.sh`_ (which logs to ``/tmp/container.log``) controls how these events fire in the following order:\n\n#.  Custom Script \n\n    This script runs before anything else starts inside the container and is intended for registering with services and running smoke tests prior to starting to process work off a Redis key.\n\n    The: https://github.com/jay-johnson/datanode/blob/master/docker/custom-pre-start.sh is installed in the container to this default location:\n    \n    ``/opt/tools/custom-pre-start.sh`` \n\n    This script logs output to this file inside the container: ``/tmp/custom-pre-start.log``. This hook can be extended with your own script by mounting the script into the container and setting this environment variable: **ENV_CUSTOM_SCRIPT** as the absolute path to your script in the container.\n\n#.  Pre-start\n\n    The: https://github.com/jay-johnson/datanode/blob/master/docker/pre-start.sh is installed in the container to this default location:\n    \n    ``/opt/tools/pre-start.sh``\n\n    This script logs output to this file inside the container: ``/tmp/pre-start.log``. This hook can be extended with your own script by mounting the script into the container and setting this environment variable: **ENV_PRESTART_SCRIPT** as the absolute path to your script in the container.\n\n#.  Start Services\n\n    The: https://github.com/jay-johnson/datanode/blob/master/docker/start-services.sh is installed in the container to this default location:\n    \n    ``/opt/tools/start-services.sh``\n\n    This script logs output to this file inside the container: ``/tmp/start-services.log``. This hook can be extended with your own script by mounting the script into the container and setting this environment variable: **ENV_START_SCRIPT** as the absolute path to your script in the container.\n\n#.  Post-start\n\n    The: https://github.com/jay-johnson/datanode/blob/master/docker/start-services.sh is installed in the container to this default location:\n    \n    ``/opt/tools/post-start.sh``\n\n    This script logs output to this file inside the container: ``/tmp/post-start.log``. This hook can be extended with your own script by mounting the script into the container and setting this environment variable: **ENV_POSTSTART_SCRIPT** as the absolute path to your script in the container.\n\n.. _start-container.sh: https://github.com/jay-johnson/datanode/blob/master/docker/start-container.sh\n.. _plots-start.sh: https://github.com/jay-johnson/datanode/blob/master/plots-start.sh\n.. _compose-local.yml: https://github.com/jay-johnson/datanode/blob/8660da719892cfe018edb0610b6d4174f4dc872b/compose-local.yml#L13\n.. _compose-x11-local.yml: https://github.com/jay-johnson/datanode/blob/master/compose-x11-local.yml\n.. _Redis Labs Predict From Cached XGB IPython notebook: https://github.com/jay-johnson/sci-pype/blob/master/examples/ML-IRIS-Redis-Labs-Predict-From-Cached-XGB.ipynb\n\n\nLicense\n=======\n\nThis repo is Apache 2.0 License: https://github.com/jay-johnson/datanode/blob/master/LICENSE\n\nRedis - https://redis.io/topics/license\n\nPlease refer to the Conda Licenses for individual Python libraries: https://docs.continuum.io/anaconda/pkg-docs\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjay-johnson%2Fdatanode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjay-johnson%2Fdatanode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjay-johnson%2Fdatanode/lists"}