docker如何处理jupyter笔记本的权限 - 3种不起作用的方法

标签 docker jupyter-notebook

在 Docker 中使用 jupyter 笔记本处理 uid/gid 和权限的最佳实践是什么?

  1. jupyter/docker-stack 中的 jupyter+python Dockerfile 之一时运行后,笔记本将保存为 uid/gid 1000:100。如果安装的主机文件夹不可被“其他”写入,则此操作将会失败,这是一种丑陋的方法。

  2. 笔记本镜像可以在指定 NB_UID 和 NB_GID 的情况下运行,如下所示:

     docker run -p 8888:8888 -it --rm \
       -e NB_UID=$(id -u) \
       -e NB_GID=$(id -g) \
       -e GRANT_SUDO=yes \
       --user root \
       --mount type=bind,source="$(pwd)",target=/home/jovyan/work \
       myimage 
    

    在这种情况下,容器中joyvan的uid/gid与my uid/gid匹配,因此写入已安装的文件夹不存在权限问题。但是,现在jovyan(容器用户)无法访问/opt/conda,该文件由1000:100拥有,其他人无法读取。所以所有的附加包都无法加载!

  3. 我们还可以使用 --build-arg myuid=$(id -u) --build-arg mygid=$(id -g) 运行 docker build

    我相信这会导致 /home/jovyan/opt/conda 都由与我相同的 uid:gid 拥有,一切都很好。但是,生成的图像只能由我使用。如果我将其交给我的协作者(具有不同的 UID),它将无法工作。

所以看来所有的可能性都被阻止了或者是一个糟糕的选择。 docker 中的文件权限很难。

有人可以分享解决这个问题的最佳方法吗?

最佳答案

Jupyter Notebook 的最佳实践是使用您自己的用户 ID 和组 ID,以便您创建的新文件将拥有正确的所有权。然后使用 --group-add users 将自己添加到 users 组中,以访问所需的文件夹(例如/opt/conda)。

完整的命令是:

docker run -it --rm --user $(id -u):$(id -g) --group-add users -v "$(pwd)":/home/jovyan -p 8888:8888 jupyter/scipy-notebook

关于docker如何处理jupyter笔记本的权限 - 3种不起作用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51120204/

相关文章:

docker - 如何在运行 Docker 命令之前激活 conda 环境

python - 如何使用 Dataproc 中的 Jupyter notebook 获取 GCS Bucket 中的文件列表?

jupyter-notebook - 在 Colab 中导入已安装的包之前需要重新启动运行时

jupyter-notebook - 如何在 jupyter/ipython 笔记本中写入文本?

docker - 使用卷时无法在主机上使用 mysql 套接字

docker - GitLab CI/CD : building multiarch Docker images

php - 我应该在我的 docker build 中运行 composer install

docker - 在Docker容器中运行uv4l-未注册设备节点

python - 如何使用 Windows 10 打开 Anaconda Navigator

jupyter-notebook - Win7下Jupyter Notebook中的撤销文本输入