Notes
May 8, 2026 · View on GitHub
This docker stack uses modified startup scripts from
jupyter/docker-stacks.
:information_source: Nevertheless, all Docker Options
and Permission-specific configurations
can be used for the images of this docker stack.
Tweaks
In comparison to jupyter/docker-stacks and/or rocker-org/rocker-versioned2, these images are tweaked as follows:
Jupyter startup scripts
Shell script /usr/local/bin/start.sh is modified to
- allow bind mounting of a home directory.
- reset
CODE_WORKDIRfor customNB_USERs.
Jupyter startup hooks
The following startup hooks are put in place:
- /usr/local/bin/start-notebook.d/10-populate.sh
to populate a bind mounted home directory
/home/jovyan. - /usr/local/bin/before-notebook.d/10-env.sh to
- update timezone according to environment variable
TZ. - add locales according to environment variable
LANGS. - set locale according to environment variable
LANG.
- update timezone according to environment variable
- /usr/local/bin/before-notebook.d/11-home.sh to create user's projects and workspaces folder.
- /usr/local/bin/before-notebook.d/12-r.sh to create user's R package library.
- /usr/local/bin/before-notebook.d/13-update-cran.sh to
- update CRAN mirror according to environment variable
CRAN. - use binary packages according to environment variable
R_BINARY_PACKAGES.
- update CRAN mirror according to environment variable
- /usr/local/bin/before-notebook.d/30-code-server.sh to update code-server settings.
- /usr/local/bin/before-notebook.d/50-rstudio.sh to
- set environment variables in
$(R RHOME)/etc/Renviron.site. - put inital RStudio settings in place.
- create user's working folder.
- set environment variables in
- /usr/local/bin/before-notebook.d/70-qgis.sh (qgisprocess images) to
- put inital QGIS settings in place.
- copy plugin 'Processing Saga NextGen Provider'.
- /usr/local/bin/before-notebook.d/71-tensorboard.sh to use Jupyter Server Proxy for TensorBoard.
- /usr/local/bin/before-notebook.d/90-limits.sh
- soft limit the address space based on the amount of physical memory
(
MEM_LIMIT) and virtual memory (SWAP_ENABLE,SWAP_FACTOR). (default: commandprlimit -v)- Do not limit if
NO_AS_LIMITorNO_MEM_LIMITis set to1oryes.
- Do not limit if
- limit the number of file descriptors according to environment variable
NOFILE_LIMIT. (default: commandprlimit -n) - limit the number of processes according to environment variable
NPROC_LIMIT. (default: commandprlimit -u) - limit the number of pending signals according to environment variable
SIGPEN_LIMIT. (default: commandprlimit -i)
- soft limit the address space based on the amount of physical memory
(
- /usr/local/bin/before-notebook.d/95-misc.sh
to export environment variables to
/tmp/environment.
Custom scripts
/usr/local/bin/busy is executed during
screen/tmux sessions to update the last-activity timestamps on JupyterHub.
:information_source: This prevents the JupyterHub Idle Culler Service from shutting down idle or long-running Jupyter Notebook servers, allowing for unattended computations.
Environment variables
CRAN: The CRAN mirror URL.R_BINARY_PACKAGES: R package type to use.- unset: Source packages. (default)
1/yes: Binary packages.
DOWNLOAD_STATIC_LIBV8=1: R (V8): Installing V8 on Linux, the alternative way.RETICULATE_MINICONDA_ENABLED=0: R (reticulate): Disable prompt to install miniconda.CS_DISABLE_GETTING_STARTED_OVERRIDE=1: code-server: Hide the coder/coder promotion in Help: Getting Started
Versions
R_VERSIONPYTHON_VERSIONJUPYTERHUB_VERSIONJUPYTERLAB_VERSIONCODE_SERVER_VERSIONRSTUDIO_VERSIONNEOVIM_VERSIONGIT_VERSIONGIT_LFS_VERSIONPANDOC_VERSIONQUARTO_VERSION(verse+ images)
Miscellaneous
BASE_IMAGE: Its very base, a Docker Official Image.PARENT_IMAGE: The image it was derived from.BUILD_DATE: The date it was built (ISO 8601 format).CTAN_REPO: The CTAN mirror URL. (verse+ images)
MRAN
Environment variable MRAN is deprecated:
After January 31, 2023, we [Microsoft] will no longer maintain the CRAN Time Machine snapshots.
Current situation regarding frozen images:
- R version < 4.2.2: MRAN retired; CRAN snapshots broken.
- 4.2.2 ≤ R version < 4.3.1: No CRAN snapshots available.
- Use renv to create reproducible environments for your R projects.
- R version ≥ 4.3.1: CRAN snapshots reinstated (P3M).
Shell
The default shell is Zsh, further enhanced with
- Framework: Oh My Zsh
- Theme: Powerlevel10k
- Font: MesloLGS NF
Extensions (code-server)
Pre-installed extensions are treated as built-in and therefore cannot be updated at user level.
TeX packages (verse+ images)
In addition to the TeX packages used in
rocker/verse,
jupyter/scipy-notebook
and required for nbconvert, the
packages requested by the community
are installed.
Settings
Default
- R:
$(R RHOME)/etc/Rprofile.site- IRkernel: Only enable
image/svg+xmlandapplication/pdffor plot display. - R Extension (code-server): Disable help panel and revert to old behaviour.
- IRkernel: Only enable
- IPython:
- Only enable figure formats
svgandpdffor IPython.
- Only enable figure formats
- JupyterLab:
- Theme > Selected Theme: JupyterLab Dark
- Terminal > Font family: MesloLGS NF
- Python LSP Server: Example settings according to jupyter-lsp/jupyterlab-lsp > Installation > Configuring the servers
- R LSP Server: Example settings according to jupyter-lsp/jupyterlab-lsp > Installation > Configuring the servers
- code-server
- Features > Chat > Disable AI Features: true
- Text Editor > Tab Size: 2
- Extensions > GitLab Workflow
- GitLab Duo Pro > Duo Code Suggestions: false
- GitLab Duo Pro > Duo Chat: false
- GitLab Duo Pro > Duo Agent Platform: false
- GitLab Duo Pro > Enabled Without Gitlab Project: false
- Extensions > GitLens — Git supercharged
- General > Show Welcome On Install: false
- General > Show Whats New After Upgrade: false
- Graph commands disabled where possible
- Extensions > Python
- Language Server: Jedi
- Extensions > R
- Bracketed Paste: true
- Plot: Use Httpgd: true
- Rterm: Linux:
/usr/local/bin/radian
:information_source: For versions ≥ 4.6.0, it can also be set to/usr/local/bin/arf. - Rterm: Option:
["--no-save", "--no-restore"] - Workspace Viewer: Show Object Size: true
- Extensions > Resource Monitor Configuration
- Show: Battery: false
- Show: Cpufreq: false
- Application > Telemetry: Telemetry Level: off
- Features > Terminal > Integrated: Font Family: MesloLGS NF
- Workbench > Appearance > Color Theme: Default Dark Modern
- QGIS (qgisprocess images):
- Append
/usr/lib/python3/dist-packagestoPYTHONPATH.
:information_source: One distro refused to find the Python bindings to QGIS (at/usr/lib/python3/dist-packages/qgis)... Kept for backwards compatibility. - Set UI Theme to 'Night Mapping'.
- Set OTB application folder and OTB folder.
- Append
- Zsh
- Oh My Zsh:
~/.zshrc- Set PATH so it includes user's private bin if it exists
- Update last-activity timestamps while in screen/tmux session
- Powerlevel10k wizard options:
- nerdfont-v3 + powerline
- small icons
- rainbow
- unicode
- 24h time
- angled separators
- sharp heads
- flat tails
- 2 lines
- dotted
- left frame
- light-ornaments
- sparse
- many icons
- concise
- instant_prompt=off
- Oh My Zsh:
- Bash: /etc/profile.d/00-reset-path.sh
and /etc/skel/.profile
- Update
PATHfor login shells, e.g. when started as a server associated with JupyterHub.
- Update
Customise
- R: Create file
~/.Rprofile- Valid plot mimetypes:
image/png,image/jpeg,image/svg+xml,application/pdf.
:information_source: MIME typetext/plainmust always be specified.
- Valid plot mimetypes:
- IPython: Create file
~/.ipython/profile_default/ipython_config.py- Valid figure formats:
png,retina,jpeg,svg,pdf.
- Valid figure formats:
- JupyterLab: Settings > Advanced Settings Editor
- code-server: Manage > Settings
- Zsh
- Oh My Zsh: Edit
~/.zshrc. - Powerlevel10k: Run
p10k configureor edit~/.p10k.zsh.- Update command:
git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull
- Update command:
- Oh My Zsh: Edit
Python
The Python version is selected as follows:
- The latest Python version numba is compatible with.
This Python version is installed at /usr/local/bin.
Additional notes on CUDA
The CUDA version is selected as follows:
- CUDA: The lastest version that has image flavour
develincluding cuDNN available.
Tweaks
- Provide NVBLAS-enabled
R_andRscript_.- Enabled at runtime and only if
nvidia-smiand at least one GPU are present.
- Enabled at runtime and only if
Environment variables
Versions
CUDA_VERSION
Miscellaneous
CUDA_IMAGE: The CUDA image it is derived from.
Settings
Default
- code-server
- Extensions > R > Rterm: Linux:
/usr/local/bin/R
- Extensions > R > Rterm: Linux:
Basic Linear Algebra Subprograms (BLAS)
These images use OpenBLAS by default.
To have R and Rscript use NVBLAS instead,
- copy the NVBLAS-enabled executables to
~/.local/binfor file in $(which {R,Rscript}); do cp "$file"_ "$HOME/.local/bin/$(basename "$file")"; done - set Extensions > R > Rterm > Linux:
/home/USER/.local/bin/Rin code-server settings
:point_right: SubstituteUSERwith your user name.
and restart the R terminal.
:information_source: The xgboost package benefits greatly from NVBLAS, if it is installed correctly.
Additional notes on subtag devtools
Node.js is installed with corepack enabled by default. Use it to manage Yarn and/or pnpm:
- Installation | Yarn - Package Manager > Updating the global Yarn version
- Installation | pnpm > Using Corepack
System Python
Package libsecret-1-dev depends on python3 from the system's package
repository.
The system's Python version is installed at /usr/bin.
:information_source: Because a more recent Python version is
installed at /usr/local/bin, it takes precedence over the system's Python
version.