Verified Commit a3f6a1f2 authored by Olivier Benz's avatar Olivier Benz
Browse files

Merge branch 'freeze-version'

parents da49a238 3ea9cae6
ARG BASE_IMAGE=debian:bullseye
ARG R_VERSION=4.2.0
ARG NB_USER=jovyan
ARG NB_UID=1000
ARG NB_GID=100
ARG JUPYTERHUB_VERSION=2.3.1
ARG JUPYTERLAB_VERSION=3.4.3
ARG CODE_BUILTIN_EXTENSIONS_DIR=/opt/code-server/lib/vscode/extensions
ARG CODE_SERVER_RELEASE=4.4.0
ARG GIT_VERSION=2.36.1
ARG GIT_LFS_VERSION=3.2.0
ARG PANDOC_VERSION=2.18
FROM registry.gitlab.b-data.ch/r/ver:${R_VERSION} as files
ARG NB_UID
ARG NB_GID
RUN mkdir /files
COPY assets /files
COPY conf/user /files
COPY scripts /files
RUN chown -R ${NB_UID}:${NB_GID} /files/var/backups/skel \
## Ensure file modes are correct when using CI
## Otherwise set to 777 in the target image
&& find /files -type d -exec chmod 755 {} \; \
&& find /files -type f -exec chmod 644 {} \; \
&& find /files/usr/local/bin -type f -exec chmod 755 {} \;
FROM registry.gitlab.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE} as gsi
FROM registry.gitlab.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
FROM registry.gitlab.b-data.ch/r/ver:${R_VERSION}
LABEL org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.source="https://gitlab.b-data.ch/jupyterlab/r/docker-stack" \
org.opencontainers.image.vendor="b-data GmbH" \
org.opencontainers.image.authors="Olivier Benz <olivier.benz@b-data.ch>"
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
ARG NB_USER
ARG NB_UID
ARG NB_GID
ARG JUPYTERHUB_VERSION
ARG JUPYTERLAB_VERSION
ARG CODE_BUILTIN_EXTENSIONS_DIR
ARG CODE_SERVER_RELEASE
ARG GIT_VERSION
ARG GIT_LFS_VERSION
ARG PANDOC_VERSION
ARG CODE_WORKDIR
ENV NB_USER=${NB_USER} \
NB_UID=${NB_UID} \
NB_GID=${NB_GID} \
JUPYTERHUB_VERSION=${JUPYTERHUB_VERSION} \
JUPYTERLAB_VERSION=${JUPYTERLAB_VERSION} \
CODE_SERVER_RELEASE=${CODE_SERVER_RELEASE} \
GIT_VERSION=${GIT_VERSION} \
GIT_LFS_VERSION=${GIT_LFS_VERSION} \
PANDOC_VERSION=${PANDOC_VERSION}
## Installing V8 on Linux, the alternative way
## https://ropensci.org/blog/2020/11/12/installing-v8
ENV DOWNLOAD_STATIC_LIBV8=1
## Install Git
COPY --from=gsi /usr/local /usr/local
## Install Git LFS
COPY --from=glfsi /usr/local /usr/local
USER root
RUN dpkgArch="$(dpkg --print-architecture)" \
&& apt-get update \
&& apt-get -y install --no-install-recommends \
bash-completion \
build-essential \
curl \
file \
fontconfig \
g++ \
gcc \
gfortran \
gnupg \
htop \
info \
inkscape \
jq \
libclang-dev \
lsb-release \
man-db \
nano \
procps \
psmisc \
screen \
sudo \
tmux \
vim \
wget \
zsh \
## Additional git runtime dependencies
libcurl3-gnutls \
liberror-perl \
## Additional git runtime recommendations
less \
ssh-client \
## Additional python-dev dependencies
&& if [ -z "$PYTHON_VERSION" ]; then \
apt-get -y install --no-install-recommends \
python3-dev \
python3-distutils; \
## make some useful symlinks that are expected to exist
## ("/usr/bin/python" and friends)
for src in pydoc3 python3 python3-config; do \
dst="$(echo "$src" | tr -d 3)"; \
[ -s "/usr/bin/$src" ]; \
[ ! -e "/usr/bin/$dst" ]; \
ln -svT "$src" "/usr/bin/$dst"; \
done; \
fi \
## Install/update pip, setuptools and wheel
&& curl -sLO https://bootstrap.pypa.io/get-pip.py \
&& python get-pip.py \
pip \
setuptools \
wheel \
&& rm get-pip.py \
## Install font MesloLGS NF
&& mkdir -p /usr/share/fonts/truetype/meslo \
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Regular.ttf \
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Bold.ttf \
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Italic.ttf \
&& curl -sL https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf -o /usr/share/fonts/truetype/meslo/MesloLGS\ NF\ Bold\ Italic.ttf \
&& fc-cache -fv \
## Set default branch name to main
&& git config --system init.defaultBranch main \
## Store passwords for one hour in memory
&& git config --system credential.helper "cache --timeout=3600" \
## Merge the default branch from the default remote when "git pull" is run
&& git config --system pull.rebase false \
## Install pandoc
&& curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
&& dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
&& rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
## Add user
&& useradd -m -s /bin/bash -N -u ${NB_UID} ${NB_USER} \
&& mkdir -p /var/backups/skel \
&& chown ${NB_UID}:${NB_GID} /var/backups/skel \
## Install Tini
&& curl -sL https://github.com/krallin/tini/releases/download/v0.19.0/tini-${dpkgArch} -o /usr/local/bin/tini \
&& chmod +x /usr/local/bin/tini \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/* \
$HOME/.cache
ENV PATH=/opt/code-server/bin:$PATH
## Install code-server
RUN mkdir /opt/code-server \
&& cd /opt/code-server \
&& curl -sL https://github.com/coder/code-server/releases/download/v${CODE_SERVER_RELEASE}/code-server-${CODE_SERVER_RELEASE}-linux-$(dpkg --print-architecture).tar.gz | tar zxf - --no-same-owner --strip-components=1 \
&& curl -sL https://upload.wikimedia.org/wikipedia/commons/9/9a/Visual_Studio_Code_1.35_icon.svg -o vscode.svg \
## Include custom fonts
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Bold.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
&& sed -i 's|</head>| <link rel="preload" href="{{BASE}}/_static/src/browser/media/fonts/MesloLGS-NF-Bold-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
&& sed -i 's|</head>| <link rel="stylesheet" type="text/css" href="{{BASE}}/_static/src/browser/media/css/fonts.css">\n </head>|g' /opt/code-server/lib/vscode/out/vs/code/browser/workbench/workbench.html \
## Install code-server extensions
&& cd /tmp \
&& curl -sLO https://dl.b-data.ch/vsix/alefragnani.project-manager-12.6.0.vsix \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension alefragnani.project-manager-12.6.0.vsix \
&& curl -sLO https://dl.b-data.ch/vsix/piotrpalarz.vscode-gitignore-generator-1.0.3.vsix \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension piotrpalarz.vscode-gitignore-generator-1.0.3.vsix \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension GitLab.gitlab-workflow \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension ms-toolsai.jupyter@2022.2.1010641114 \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension ms-python.python@2022.2.1924087327 \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension christian-kohler.path-intellisense \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension eamodio.gitlens \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension mhutchie.git-graph \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension redhat.vscode-yaml \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension grapecity.gc-excelviewer \
## Create tmp folder for Jupyter extension
&& cd /opt/code-server/lib/vscode/extensions/ms-toolsai.jupyter-* \
&& mkdir -m 1777 tmp \
## Clean up
&& rm -rf /tmp/* \
$HOME/.config \
$HOME/.local
## Install JupyterLab
RUN pip install \
jupyter-server-proxy \
jupyterhub==${JUPYTERHUB_VERSION} \
jupyterlab==${JUPYTERLAB_VERSION} \
jupyterlab-git \
jupyterlab-lsp \
notebook \
nbconvert \
python-lsp-server[all] \
## Include custom fonts
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Bold.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
&& sed -i 's|</head>|<link rel="preload" href="{{page_config.fullStaticUrl}}/assets/fonts/MesloLGS-NF-Bold-Italic.woff2" as="font" type="font/woff2" crossorigin="anonymous"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
&& sed -i 's|</head>|<link rel="stylesheet" type="text/css" href="{{page_config.fullStaticUrl}}/assets/css/fonts.css"></head>|g' /usr/local/share/jupyter/lab/static/index.html \
## Clean up
&& rm -rf /tmp/* \
$HOME/.cache
## Install R related stuff
RUN apt-get update \
&& apt-get -y install --no-install-recommends \
## Current ZeroMQ library for R pbdZMQ
libzmq3-dev \
## Required for R extension
libcairo2-dev \
libcurl4-openssl-dev \
libfontconfig1-dev \
libssl-dev \
libxml2-dev \
## Install radian
&& pip install radian \
## Install the R kernel for JupyterLab
&& install2.r --error --deps TRUE --skipinstalled -n $NCPUS \
IRkernel \
languageserver \
httpgd \
&& Rscript -e "IRkernel::installspec(user = FALSE)" \
## Disable help panel and revert to old behaviour
&& echo 'options(vsc.helpPanel = FALSE)' >> /usr/local/lib/R/etc/Rprofile.site \
## Install code-server extension
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension Ikuyadeu.r@2.4.0 \
## Clean up
&& rm -rf /tmp/* \
/var/lib/apt/lists/* \
$HOME/.cache \
$HOME/.config \
$HOME/.ipython \
$HOME/.local
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ENV HOME=/home/${NB_USER} \
CODE_WORKDIR=${CODE_WORKDIR:-/home/${NB_USER}/projects} \
SHELL=/usr/bin/zsh \
TERM=xterm-256color
WORKDIR ${HOME}
## Install Oh My Zsh with Powerlevel10k theme
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended \
&& git clone --depth=1 https://github.com/romkatv/powerlevel10k.git .oh-my-zsh/custom/themes/powerlevel10k \
&& sed -i 's/ZSH="\/home\/jovyan\/.oh-my-zsh"/ZSH="$HOME\/.oh-my-zsh"/g' .zshrc \
&& sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="powerlevel10k\/powerlevel10k"/g' .zshrc \
&& echo "\n# set PATH so it includes user's private bin if it exists\nif [ -d \"\$HOME/bin\" ] ; then\n PATH=\"\$HOME/bin:\$PATH\"\nfi" >> .zshrc \
&& echo "\n# set PATH so it includes user's private bin if it exists\nif [ -d \"\$HOME/.local/bin\" ] ; then\n PATH=\"\$HOME/.local/bin:\$PATH\"\nfi" >> .zshrc \
&& echo "\n# Update last-activity timestamps while in screen/tmux session\nif [ ! -z \"\$TMUX\" -o ! -z \"\$STY\" ] ; then\n busy &\nfi" >> .bashrc \
&& echo "\n# Update last-activity timestamps while in screen/tmux session\nif [ ! -z \"\$TMUX\" -o ! -z \"\$STY\" ] ; then\n setopt nocheckjobs\n busy &\nfi" >> .zshrc \
&& echo "\n# To customize prompt, run \`p10k configure\` or edit ~/.p10k.zsh." >> .zshrc \
&& echo "[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh" >> .zshrc \
## Create backup of home directory
&& cp -a $HOME/. /var/backups/skel
## Copy files as late as possible to avoid cache busting
COPY --from=files /files /
COPY --from=files /files/var/backups/skel ${HOME}
EXPOSE 8888
## Configure container startup
ENTRYPOINT ["tini", "-g", "--"]
CMD ["start-notebook.sh"]
ARG R_VERSION=4.2.0
FROM registry.gitlab.b-data.ch/jupyterlab/r/verse:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
gdal-bin \
libfftw3-dev \
libgdal-dev \
libgeos-dev \
libgsl0-dev \
#libgl1-mesa-dev \
#libglu1-mesa-dev \
libhdf4-alt-dev \
libhdf5-dev \
libjq-dev \
#libpq-dev \
libproj-dev \
libprotobuf-dev \
libnetcdf-dev \
#libsqlite3-dev \
#libssl-dev \
libudunits2-dev \
netcdf-bin \
postgis \
protobuf-compiler \
sqlite3 \
tk-dev \
#unixodbc-dev
&& install2.r --error --skipinstalled -n $NCPUS \
#RColorBrewer \
RNetCDF \
classInt \
deldir \
gstat \
hdf5r \
lidR \
mapdata \
maptools \
mapview \
ncdf4 \
proj4 \
raster \
rgdal \
rgeos \
rlas \
sf \
sp \
spacetime \
spatstat \
spatialreg \
spdep \
stars \
terra \
tidync \
tmap \
geosphere \
## Archived on 2022-05-04 as check problems were not corrected in time.
&& Rscript -e "devtools::install_version('RandomFields', version = '3.3.14')" \
## Archived on 2022-05-04 as requires archived package 'RandomFields'.
&& Rscript -e "devtools::install_version('geoR', version = '1.8-1')" \
## from bioconductor
&& R -e "BiocManager::install('rhdf5', update=FALSE, ask=FALSE, Ncpus = Sys.getenv('NCPUS'))" \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/*
## Install wgrib2 for NOAA's NOMADS / rNOMADS forecast files
#RUN cd /opt \
# && wget https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz \
# && tar -xvf wgrib2.tgz \
# && rm -rf wgrib2.tgz \
# && cd grib2 \
# ## arm64: Needs to be compiled with USE_NETCDF4=1, USE_JASPER=0
# ## https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/index.html
# && if [ $(dpkg --print-architecture) = "arm64" ]; then \
# sed -i 's/^USE_NETCDF4=0/USE_NETCDF4=1/' makefile; \
# sed -i 's/^USE_NETCDF3=1/USE_NETCDF3=0/' makefile; \
# sed -i 's/^USE_JASPER=1/USE_JASPER=0/' makefile; \
# NETCDF4_SRC=`sed -n 's/ netcdf4src=\(.*\)/\1/p' makefile`; \
# wget ftp://ftp.unidata.ucar.edu/pub/netcdf/$NETCDF4_SRC; \
# HDF5_SRC=`sed -n 's/ hdf5src:=\(.*\)/\1/p' makefile`; \
# HDF5_MAJ_MIN_PAT=`echo $HDF5_SRC | \
# sed -n 's/hdf5-\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p'`; \
# HDF5_MAJ_MIN=`echo $HDF5_MAJ_MIN_PAT | \
# sed -n 's/\([[:digit:]]\+\.[[:digit:]]\+\).*/\1/p'`; \
# wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$HDF5_MAJ_MIN/hdf5-$HDF5_MAJ_MIN_PAT/src/$HDF5_SRC; \
# fi \
# && CC=gcc FC=gfortran make \
# && ln -s /opt/grib2/wgrib2/wgrib2 /usr/local/bin/wgrib2
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ARG R_VERSION=4.2.0
FROM registry.gitlab.b-data.ch/jupyterlab/r/base:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
USER root
RUN apt-get update \
&& apt-get -y install --no-install-recommends \
cmake \
#libxml2-dev \
#libcairo2-dev \
libfribidi-dev \
libgit2-dev \
libharfbuzz-dev \
libmariadb-dev \
libpq-dev \
libsasl2-dev \
libsqlite3-dev \
libssh2-1-dev \
libtiff-dev \
libxtst6 \
unixodbc-dev \
&& install2.r --error --skipinstalled -n $NCPUS BiocManager \
&& install2.r --error --deps TRUE --skipinstalled -n $NCPUS \
tidyverse \
dplyr \
devtools \
formatR \
## dplyr database backends
&& install2.r --error --skipinstalled -n $NCPUS \
arrow \
duckdb \
fst \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/*
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ARG R_VERSION=4.2.0
ARG CODE_BUILTIN_EXTENSIONS_DIR=/opt/code-server/lib/vscode/extensions
ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2022/06/23/tlnet
FROM registry.gitlab.b-data.ch/jupyterlab/r/tidyverse:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
ARG CODE_BUILTIN_EXTENSIONS_DIR
ARG CTAN_REPO
USER root
ENV HOME=/root \
CTAN_REPO=${CTAN_REPO} \
PATH=/opt/TinyTeX/bin/linux:$PATH
WORKDIR ${HOME}
## Add LaTeX, rticles and bookdown support
RUN wget "https://travis-bin.yihui.name/texlive-local.deb" \
&& dpkg -i texlive-local.deb \
&& rm texlive-local.deb \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
default-jdk \
fonts-roboto \
ghostscript \
hugo \
lbzip2 \
libbz2-dev \
libglpk-dev \
libgmp3-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libhunspell-dev \
libicu-dev \
liblzma-dev \
#libpcre2-dev \
libmagick++-dev \
libopenmpi-dev \
libpoppler-cpp-dev \
librdf0-dev \
## Installing libnode-dev uninstalls nodejs
## https://github.com/jeroen/V8/issues/100
#libnode-dev \
qpdf \
texinfo \
## Install R package redland
&& install2.r --error --skipinstalled -n $NCPUS redland \
## Explicitly install runtime library sub-deps of librdf0-dev
&& apt-get install -y \
libcurl4-openssl-dev \
libxslt-dev \
librdf0 \
redland-utils \
rasqal-utils \
raptor2-utils \
## Get rid of librdf0-dev and its dependencies (incl. libcurl4-gnutls-dev)
&& apt-get -y autoremove \
&& rm -rf /var/lib/apt/lists/* \
## Admin-based install of TinyTeX:
&& wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
| sh -s - --admin --no-path \
&& mv ~/.TinyTeX /opt/TinyTeX \
&& ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
/opt/TinyTeX/bin/linux \
&& /opt/TinyTeX/bin/linux/tlmgr path add \
&& tlmgr update --self \
&& tlmgr install \
ae \
cm-super \
context \
dvipng \
listings \
makeindex \
parskip \
pdfcrop \
&& tlmgr path add \
&& Rscript -e "tinytex::r_texmf()" \
&& chown -R root:${NB_GID} /opt/TinyTeX \
&& chmod -R g+w /opt/TinyTeX \
&& chmod -R g+wx /opt/TinyTeX/bin \
&& echo "PATH=${PATH}" >> /usr/local/lib/R/etc/Renviron.site \
&& install2.r --error --skipinstalled -n $NCPUS PKI \
## And some nice R packages for publishing-related stuff
&& install2.r --error --deps TRUE --skipinstalled -n $NCPUS \
blogdown \
bookdown \
distill \
rticles \
rmdshower \
rJava \
xaringan \
## Install code-server extensions
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension James-Yu.latex-workshop \
## Clean up
&& rm -rf /tmp/* \
/root/.config \
/root/.local \
/root/.vscode-remote \
/root/.wget-hsts
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ENV HOME=/home/${NB_USER}
WORKDIR ${HOME}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment