diff --git a/base/Dockerfile b/base/Dockerfile index 82f900034626d417526b83f81512e29e2f9bf9cd..a3fc30b7dc2c1d0fc85d3814065728c17779d2a1 100644 --- a/base/Dockerfile +++ b/base/Dockerfile @@ -1,11 +1,8 @@ -FROM docker-registry.ebrains.eu/clb-jupyter-image/ubuntu:focal +# https://jupyter-docker-stacks.readthedocs.io/en/latest/#using-old-images +FROM jupyter/minimal-notebook:a374cab4fcb6 LABEL maintainer="Collaboratory Platform <platform@humanbrainproject.eu>" -ARG NB_USER="jovyan" -ARG NB_UID=1000 -ARG NB_GID=100 - ENV GIT_COMMITTER_NAME=platform@humanbrainproject.eu \ GIT_COMMITTER_EMAIL=platform@humanbrainproject.eu \ USER="${NB_USER}" \ @@ -24,43 +21,22 @@ RUN ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime ENV DEBIAN_FRONTEND noninteractive RUN apt-get update --yes && \ apt-get install --yes \ - ca-certificates \ cmake \ csh \ curl \ cython \ gcc \ gettext \ - git \ llvm \ lsof \ mpich \ - pandoc \ - python-dev \ - python3-venv \ - python3-pip \ r-base \ swig \ - unzip \ vim && \ apt-get clean && rm -rf /var/lib/apt/lists/* -# install nodejs -RUN curl -fsSL https://deb.nodesource.com/setup_17.x | bash -RUN apt-get install -y nodejs - -# install min texlive (necessary for nb exports) -RUN apt-get update --yes && \ - apt-get install --yes --no-install-recommends \ - wget \ - texlive-xetex \ - texlive-fonts-recommended \ - texlive-plain-generic && \ - apt-get clean && rm -rf /var/lib/apt/lists/* - # jupyter install in /opt/app-root/ for legacy reasons (previously based on centos base image) RUN mkdir -p /opt/app-root/etc /opt/app-root/clb/ /opt/app-root/src -COPY base/jupyter_notebook_config.py /opt/app-root/etc/ # folders for drive integration RUN mkdir -p /mnt/user/ @@ -73,10 +49,6 @@ ENV HOME=/opt/app-root/src/ COPY base/requirements.txt /tmp RUN pip install --no-cache-dir -r /tmp/requirements.txt -# fix missing template issue in nbgitpuller: https://github.com/jupyterhub/nbgitpuller/issues/235 -# remove this once it has been fixed in project -RUN ln -s /usr/local/lib/python3.8/dist-packages/nbgitpuller/templates/status.html /usr/local/lib/python3.8/dist-packages/notebook/templates/ - # disable ipcluster extension RUN jupyter labextension disable ipcluster \ ipyparallel-labextension @@ -103,9 +75,8 @@ RUN R --slave -e "IRkernel::installspec(name = 'ir363', displayname = 'R 3.6.3') # disable core dumps RUN echo "* - core 0" >> /etc/security/limits.conf -# fix permissions so NB_USER has permissions to run notebooks and install packages -COPY base/fix-permissions /usr/local/bin/fix-permissions -RUN chmod +x /usr/local/bin/fix-permissions +# allow the script to fail (because of symlinks) without failing the build (TODO: fix) +RUN sed -i 's/set -e/set +e/' $(which fix-permissions) # copy user setup file COPY base/user_setup.sh /opt/app-root/etc/ @@ -113,19 +84,12 @@ RUN chmod +x /opt/app-root/etc/user_setup.sh RUN fix-permissions /opt/app-root/ && \ fix-permissions /tmp/cache/ && \ - fix-permissions /usr/local/share/jupyter/ && \ - fix-permissions /usr/local/etc/jupyter && \ - fix-permissions /usr/local/lib/R/site-library && \ - fix-permissions /usr/etc/jupyter/ + fix-permissions /opt/conda/share/jupyter/ && \ + fix-permissions /opt/conda/etc/jupyter && \ + fix-permissions /usr/local/lib/R/site-library -COPY base/start-notebook.sh /opt/app-root/etc/ COPY base/.spynnaker.cfg /opt/app-root/src/ -RUN chmod +x /opt/app-root/etc/start-notebook.sh WORKDIR /opt/app-root/src/ -EXPOSE 8080 - USER ${NB_UID} - -CMD /opt/app-root/etc/start-notebook.sh diff --git a/base/fix-permissions b/base/fix-permissions deleted file mode 100644 index 45354c0dccbadfef143fc32333a8b240430d3d89..0000000000000000000000000000000000000000 --- a/base/fix-permissions +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# source: https://github.com/sclorg/s2i-base-container/blob/master/core/root/usr/bin/fix-permissions - -# Allow this script to fail without failing a build -set +e - -SYMLINK_OPT=${2:--L} - -# Fix permissions on the given directory or file to allow group read/write of -# regular files and execute of directories. - -[ $(id -u) -ne 0 ] && CHECK_OWNER=" -uid $(id -u)" - -# If argument does not exist, script will still exit with 0, -# but at least we'll see something went wrong in the log -if ! [ -e "$1" ] ; then - echo "ERROR: File or directory $1 does not exist." >&2 - # We still want to end successfully - exit 0 -fi - -find $SYMLINK_OPT "$1" ${CHECK_OWNER} \! -gid 0 -exec chgrp 0 {} + -find $SYMLINK_OPT "$1" ${CHECK_OWNER} \! -perm -g+rw -exec chmod g+rw {} + -find $SYMLINK_OPT "$1" ${CHECK_OWNER} -perm /u+x -a \! -perm /g+x -exec chmod g+x {} + -find $SYMLINK_OPT "$1" ${CHECK_OWNER} -type d \! -perm /g+x -exec chmod g+x {} + - -# Always end successfully -exit 0 \ No newline at end of file diff --git a/base/jupyter_notebook_config.py b/base/jupyter_notebook_config.py deleted file mode 100644 index 6b9fc72094b87c9749d64cced15572d7fb6a21ac..0000000000000000000000000000000000000000 --- a/base/jupyter_notebook_config.py +++ /dev/null @@ -1,26 +0,0 @@ -import os - -port = int(os.environ.get('JUPYTER_NOTEBOOK_PORT', '8080')) - -c.NotebookApp.ip = '0.0.0.0' -c.NotebookApp.port = port -c.NotebookApp.open_browser = False -c.NotebookApp.quit_button = False - -c.WebPDFExporter.enabled = False - -if os.environ.get('JUPYTERHUB_SERVICE_PREFIX'): - c.NotebookApp.base_url = os.environ.get('JUPYTERHUB_SERVICE_PREFIX') - -password = os.environ.get('JUPYTER_NOTEBOOK_PASSWORD') -if password: - import notebook.auth - c.NotebookApp.password = notebook.auth.passwd(password) - del password - del os.environ['JUPYTER_NOTEBOOK_PASSWORD'] - -image_config_file = '/opt/app-root/src/.jupyter/jupyter_notebook_config.py' - -if os.path.exists(image_config_file): - with open(image_config_file) as fp: - exec(compile(fp.read(), image_config_file, 'exec'), globals()) diff --git a/base/requirements.txt b/base/requirements.txt index cb25f19118c1dde5c863f0cfaa7020317aca841a..9929e0c05e0521fd9767f225f25d0013859d70cc 100644 --- a/base/requirements.txt +++ b/base/requirements.txt @@ -1,9 +1,6 @@ -beautifulsoup4==4.10.0 bluepyopt==1.11.5 bokeh==2.4.2 Cython==0.29.26 -cffi==1.14.5 -cryptography==36.0.1 ebrains-drive==0.5.0 h5py==3.6.0 ipympl==0.8.5 @@ -11,10 +8,7 @@ ipywidgets==7.6.5 jupyterlab-widgets==1.0.2 jupyterlab-topbar==0.6.1 jupyterlab-system-monitor==0.8.0 -jupyterhub==1.5.0 -jupyterlab==3.2.8 jupyterlab-git==0.34.1 -jupyter-server==1.13.5 lazyarray==0.5.1 lxml==4.7.1 matplotlib==3.5.3 @@ -31,9 +25,7 @@ numpy==1.23.5 pandas==1.3.5 patsy==0.5.2 plotly==5.5.0 -Pygments==2.11.2 python-swiftclient==3.13.0 -PyJWT==2.3.0 pyOpenSSL==22.0.0 # TODO: Issue with 22.1 https://github.com/pyca/pyopenssl/issues/1154 pyunicore==0.15.0 requests-oauthlib==1.3.0 diff --git a/base/start-notebook.sh b/base/start-notebook.sh deleted file mode 100644 index 4c2eb7c368cd4baf9da4a7deda9ac389ddf21edb..0000000000000000000000000000000000000000 --- a/base/start-notebook.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -e -# Disable core dumps -ulimit -c 0 -exec jupyter labhub --NotebookApp.default_url=/lab --config=/opt/app-root/etc/jupyter_notebook_config.py $@