在给定的virtualenv上运行Jupyter实验室容器

时间:2019-10-28 19:05:30

标签: python docker jupyter-notebook jupyter

我想在Docker容器的virtualenv内部使用Jupyter实验室。 我试图在virtualenv内运行Jupyter实验室容器,但是因为$ PATH变量错误而不能。

背景: 我使用的是一种hpc群集,因此我们没有太多权限。 我必须在只读docker容器上运行Jupyter Lab。 我的主目录和工作目录已安装。 但是非root用户无法构建任何新的容器映像 (我打算向管理员提出此解决方案。)

要求: 我想安装只读容器中未提供的新软件包。 我想将新软件包安装到指定位置。

因此,如果指定了$ VENV_PATH环境变量,我想创建一个在virtualenv中运行Jupyter实验室的Docker映像。

我创建了一个基于jupyter/datascience-notebook image on DockerHub的Dockerfile和脚本。

Dockerfile:

FROM jupyter/datascience-notebook

USER $NB_UID
COPY start-venv-notebook.sh /usr/local/bin/
CMD ["start-venv-notebook.sh"]

start-venv-notebook.sh:

#!/bin/bash

set -e

if [[ ! -z "${VENV_PATH}" ]]; then
    abspath=$(realpath "${VENV_PATH}")
    if [ ! -e "${abspath}" ]; then
        # create venv
        python -m venv "${abspath}"
    fi
    # activate venv
    export VIRTUAL_ENV=$abspath
    export PATH="$abspath/bin:$PATH"
fi

# exec original CMD
exec /usr/local/bin/start-notebook.sh "$@"

我想这样使用这个容器:

docker run -p 8888:8888 -e VENV_PATH=testvenv -e JUPYTER_ENABLE_LAB=yes venvjupyterlab

但是,当我运行此容器时,它不会在virtualenv中运行。 我认为原因是来自$ PATH。 / opt / conda / bin从某处添加。我找不到要点。

$ echo $PATH
/opt/conda/bin:/home/jovyan/testvenv/bin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

请给我一些帮助或告诉我其他解决方案。 谢谢。

0 个答案:

没有答案