在 Docker 中使用 jupyter 笔记本处理 uid/gid 和权限的最佳实践是什么?
当 jupyter/docker-stack 中的 jupyter+python Dockerfile 之一时运行后,笔记本将保存为 uid/gid 1000:100。如果安装的主机文件夹不可被“其他”写入,则此操作将会失败,这是一种丑陋的方法。
笔记本镜像可以在指定 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拥有,其他人无法读取。所以所有的附加包都无法加载!我们还可以使用
--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/