Docker的新手
在docker中使用jupyter笔记本处理用户ID / GID和权限的最佳实践是什么?
运行https://github.com/jupyter/docker-stacks/tree/master/scipy-notebook中的jupyter + python Dockerfile中的一个时,笔记本将以uid / gid 1000:100保存。如果已安装的主机文件夹不能被“ other”写入,则将失败。
可以运行笔记本图像,并指定NB_UID和NB_GID,如下所示:
docker run -p 8888:8888 -it --rm -e NB_UID = $(id -u)-e NB_GID = $(id -g)-e GRANT_SUDO =是--user root --mount type = bind ,source =“ $(pwd)”,target = / home / jovyan / work myimage
在这种情况下,容器中joyvan的uid / gid与 my uid / gid匹配,因此写入已安装的文件夹没有权限问题。但是,现在,jovyan(容器用户)无法访问/ opt / conda,它是1000:100拥有的,其他用户无法读取。因此无法加载所有附加软件包!
我相信这将导致/ home / jovyan和/ opt / conda与我同一个uid:gid拥有,一切都很好。但是,我只能 使用生成的图像。如果我将其提供给我的协作者(具有不同的uid),它将无法正常工作。
因此,似乎所有可能性都被阻止或选择不当。 Docker中的文件权限很困难。
有人可以分享解决此问题的最佳方法吗?
答案 0 :(得分:3)
使用Jupyter Notebook的最佳实践是使用您自己的用户ID和组ID,以便您创建的新文件具有正确的所有权。然后使用> [1/4] Resolving packages... [2/4] Fetching packages... error
> css-loader@1.0.0: The engine "node" is incompatible with this module.
> Expected version ">= 6.9.0 <7.0.0 || >= 8.9.0". error Found
> incompatible module info Visit https://yarnpkg.com/en/docs/cli/add for
> documentation about this command.
将自己添加到用户组中,以访问所需的文件夹(例如/ opt / conda)。
完整命令为:
--group-add users
答案 1 :(得分:0)
我遇到了同样的问题,并找到了here引用的很好的解决方案。
COPY --chown=1000:100 hostfolder/* /home/$NB_USER/work/
请注意,尚未在命令选项中实现环境或参数扩展,因此,以下行将导致构建错误failed to build: unable to convert uid/gid chown string to host mapping: can't find uid for user $NB_UID: no such user: $NB_UID
# COPY --chown=$NB_USER:$NB_GID hostfolder/* /home/$NB_USER/work/
因此,需要对用户(jovyan)和组名(用户)或id(1000:100)进行硬编码。