我想在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
请给我一些帮助或告诉我其他解决方案。 谢谢。