# This is a version of DockerfileLeanFoundation for ARM # Some packages from the AMD image are excluded because they are not available on ARM or take too long to build # Use base system for cleaning up wayward processes FROM phusion/baseimage:jammy-1.0.1 MAINTAINER QuantConnect # Use baseimage-docker's init system. CMD ["/sbin/my_init"] # Install OS Packages: # Misc tools for running Python.NET and IB inside a headless container. RUN add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update \ && apt-get install -y git libgtk2.0.0 bzip2 curl unzip wget python3-pip python3-opengl zlib1g-dev \ xvfb libxrender1 libxtst6 libxi6 libglib2.0-dev libopenmpi-dev libstdc++6 openmpi-bin \ r-base pandoc libcurl4-openssl-dev \ openjdk-11-jdk openjdk-11-jre bbe \ && apt-get clean && apt-get autoclean && apt-get autoremove --purge -y \ && rm -rf /var/lib/apt/lists/* # Install dotnet 9 sdk & runtime # The .deb packages don't support ARM, the install script does ENV PATH="/root/.dotnet:${PATH}" RUN wget https://dot.net/v1/dotnet-install.sh && \ chmod 777 dotnet-install.sh && \ ./dotnet-install.sh -c 9.0 && \ rm dotnet-install.sh ENV DOTNET_ROOT="/root/.dotnet" # Set PythonDLL variable for PythonNet ENV PYTHONNET_PYDLL="/opt/miniconda3/lib/libpython3.11.so" # Install miniconda ENV CONDA="Miniconda3-py311_24.9.2-0-Linux-aarch64.sh" ENV PATH="/opt/miniconda3/bin:${PATH}" RUN wget -q https://cdn.quantconnect.com/miniconda/${CONDA} && \ bash ${CONDA} -b -p /opt/miniconda3 && rm -rf ${CONDA} # Install java runtime for h2o lib RUN apt-get update && apt-get install -y alien dpkg-dev debhelper build-essential && wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-aarch64_bin.rpm \ && alien -i jdk-17.0.12_linux-aarch64_bin.rpm \ && update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.12-oracle-aarch64/bin/java 1 \ && rm jdk-17.0.12_linux-aarch64_bin.rpm # Avoid pip install read timeouts ENV PIP_DEFAULT_TIMEOUT=120 # Install numpy first to avoid it not being resolved when installing libraries that depend on it next RUN pip install --no-cache-dir numpy==1.26.4 # Install newer (than provided by ubuntu) cmake required by scikit build process RUN conda install -c conda-forge cmake==3.28.4 && conda clean -y --all # The list of packages in this image is shorter than the list in the AMD images # This list only includes packages that can be installed within 2 minutes on ARM RUN pip install --no-cache-dir \ cython==3.1.2 \ pandas==2.2.3 \ scipy==1.11.4 \ numpy==1.26.4 \ wrapt==1.17.2 \ astropy==7.1.0 \ beautifulsoup4==4.13.4 \ dill==0.3.8 \ jsonschema==4.24.0 \ lxml==5.4.0 \ msgpack==1.1.0 \ numba==0.59.1 \ xarray==2025.6.0 \ plotly==5.24.1 \ jupyterlab==4.4.3 \ ipywidgets==8.1.7 \ jupyterlab-widgets==3.0.15 \ tensorflow==2.18.0 \ docutils==0.21.2 \ gensim==4.3.3 \ keras==3.10.0 \ lightgbm==4.6.0 \ nltk==3.9.1 \ graphviz==0.20.3 \ cmdstanpy==1.2.5 \ copulae==0.7.9 \ featuretools==1.31.0 \ PuLP==3.2.1 \ pymc==5.23.0 \ rauth==0.7.3 \ scikit-learn==1.6.1 \ scikit-optimize==0.10.2 \ aesara==2.9.4 \ tsfresh==0.20.2 \ tslearn==0.6.3 \ tweepy==4.15.0 \ PyWavelets==1.8.0 \ umap-learn==0.5.7 \ fastai==2.8.2 \ arch==7.2.0 \ copulas==0.12.2 \ cufflinks==0.17.3 \ gym==0.26.2 \ deap==1.4.3 \ pykalman==0.10.1 \ cvxpy==1.6.6 \ pyro-ppl==1.9.1 \ sklearn-json==0.1.0 \ dtw-python==1.5.3 \ gluonts==0.16.1 \ gplearn==0.4.2 \ jax==0.5.3 \ pennylane==0.41.1 \ PennyLane-Lightning==0.41.1 \ pennylane-qiskit==0.36.0 \ mplfinance==0.12.10b0 \ hmmlearn==0.3.3 \ ta==0.11.0 \ seaborn==0.13.2 \ optuna==4.3.0 \ findiff==0.12.1 \ sktime==0.37.0 \ hyperopt==0.2.7 \ bayesian-optimization==2.0.4 \ matplotlib==3.8.4 \ sdeint==0.3.0 \ pandas_market_calendars==5.1.0 \ ruptures==1.1.9 \ simpy==4.1.1 \ scikit-learn-extra==0.3.0 \ ray==2.46.0 \ "ray[tune]"==2.46.0 \ "ray[rllib]"==2.46.0 \ "ray[data]"==2.46.0 \ "ray[train]"==2.46.0 \ fastText==0.9.3 \ h2o==3.46.0.7 \ prophet==1.1.7 \ Riskfolio-Lib==7.0.1 \ torch==2.5.1 \ torchvision==0.20.1 \ ax-platform==1.0.0 \ alphalens-reloaded==0.4.6 \ pyfolio-reloaded==0.9.9 \ altair==5.5.0 \ modin==0.33.1 \ persim==0.3.8 \ ripser==0.6.12 \ pydmd==2025.6.1 \ EMD-signal==1.6.4 \ spacy==3.8.7 \ pandas-ta==0.3.14b \ pytorch-ignite==0.5.2 \ tensorly==0.9.0 \ mlxtend==0.23.4 \ shap==0.47.2 \ lime==0.2.0.1 \ mpmath==1.3.0 \ polars==1.30.0 \ stockstats==0.6.5 \ QuantStats==0.0.64 \ hurst==0.0.5 \ numerapi==2.20.6 \ pymdptoolbox==4.0-b3 \ panel==1.7.1 \ hvplot==0.11.3 \ py-heat==0.0.6 \ py-heat-magic==0.0.2 \ bokeh==3.6.3 \ river==0.21.0 \ stumpy==1.13.0 \ pyvinecopulib==0.6.5 \ ijson==3.4.0 \ jupyter-resource-usage==1.1.1 \ injector==0.22.0 \ openpyxl==3.1.5 \ xlrd==2.0.1 \ mljar-supervised==1.1.17 \ dm-tree==0.1.9 \ lz4==4.4.4 \ ortools==9.11.4210 \ py_vollib==1.0.1 \ thundergbm==0.3.17 \ yellowbrick==1.5 \ livelossplot==0.5.6 \ gymnasium==1.0.0 \ interpret==0.6.11 \ DoubleML==0.10.0 \ jupyter-bokeh==4.0.5 \ imbalanced-learn==0.13.0 \ openai==1.86.0 \ lazypredict==0.2.16 \ darts==0.35.0 \ fastparquet==2024.11.0 \ tables==3.10.2 \ dimod==0.12.20 \ dwave-samplers==1.5.0 \ python-statemachine==2.5.0 \ pymannkendall==1.4.3 \ Pyomo==6.9.2 \ gpflow==2.10.0 \ pyarrow==19.0.1 \ dwave-ocean-sdk==8.3.0 \ chardet==5.2.0 \ stable-baselines3==2.6.0 \ Shimmy==2.0.0 \ FixedEffectModel==0.0.5 \ transformers==4.52.4 \ langchain==0.3.25 \ pomegranate==1.1.2 \ MAPIE==1.0.1 \ mlforecast==1.0.2 \ x-transformers==2.3.12 \ Werkzeug==3.1.3 \ nolds==0.6.2 \ feature-engine==1.8.3 \ pytorch-tabnet==4.1.0 \ opencv-contrib-python-headless==4.11.0.86 \ POT==0.9.5 \ alibi-detect==0.12.0 \ datasets==2.21.0 \ scikeras==0.13.0 \ contourpy==1.3.2 # Install dwave tool RUN dwave install --all -y # Install 'ipopt' solver for 'Pyomo' RUN conda install -c conda-forge ipopt==3.14.17 \ && conda clean -y --all # We install need to install separately else fails to find numpy RUN pip install --no-cache-dir iisignature==0.24 # Install spacy models RUN python -m spacy download en_core_web_md && python -m spacy download en_core_web_sm RUN conda config --set solver classic && conda install -y -c conda-forge \ openmpi=5.0.8 \ && conda clean -y --all # Install nltk data RUN python -m nltk.downloader -d /usr/share/nltk_data punkt && \ python -m nltk.downloader -d /usr/share/nltk_data punkt_tab && \ python -m nltk.downloader -d /usr/share/nltk_data vader_lexicon && \ python -m nltk.downloader -d /usr/share/nltk_data stopwords && \ python -m nltk.downloader -d /usr/share/nltk_data wordnet # Install Pyrb RUN wget -q https://cdn.quantconnect.com/pyrb/pyrb-master-250054e.zip && \ unzip -q pyrb-master-250054e.zip && cd pyrb-master && \ pip install . && cd .. && rm -rf pyrb-master && rm pyrb-master-250054e.zip # Install SSM RUN wget -q https://cdn.quantconnect.com/ssm/ssm-master-646e188.zip && \ unzip -q ssm-master-646e188.zip && cd ssm-master && \ pip install . && cd .. && rm -rf ssm-master && rm ssm-master-646e188.zip # Install uni2ts RUN wget -q https://cdn.quantconnect.com/uni2ts/uni2ts-main-ffe78db.zip && \ unzip -q uni2ts-main-ffe78db.zip && cd uni2ts-main && \ pip install . && cd .. && rm -rf uni2ts-main && rm uni2ts-main-ffe78db.zip # Install chronos-forecasting RUN wget -q https://cdn.quantconnect.com/chronos-forecasting/chronos-forecasting-main-b0bdbd9.zip && \ unzip -q chronos-forecasting-main-b0bdbd9.zip && cd chronos-forecasting-main && \ pip install ".[training]" && cd .. && rm -rf chronos-forecasting-main && rm chronos-forecasting-main-b0bdbd9.zip RUN echo "{\"argv\":[\"python\",\"-m\",\"ipykernel_launcher\",\"-f\",\"{connection_file}\"],\"display_name\":\"Foundation-Py-Default\",\"language\":\"python\",\"metadata\":{\"debugger\":true}}" > /opt/miniconda3/share/jupyter/kernels/python3/kernel.json # Install wkhtmltopdf and xvfb to support HTML to PDF conversion of reports RUN apt-get update && apt install -y xvfb wkhtmltopdf && \ apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/* # Install fonts for matplotlib RUN wget -q https://cdn.quantconnect.com/fonts/foundation.zip && unzip -q foundation.zip && rm foundation.zip \ && mv "lean fonts/"* /usr/share/fonts/truetype/ && rm -rf "lean fonts/" "__MACOSX/" # label definitions LABEL strict_python_version=3.11.11 LABEL python_version=3.11 LABEL target_framework=net9.0