在jupyter dockerfile中创建非root用户

时间:2016-12-14 20:41:27

标签: python docker jupyter-notebook

我从docker开始,用jupyter和一些python库构建了一个图像。最终用户应该能够使用jupyter并通过容器访问特定的主机数据目录(读/写权限),但必须是非root用户。到目前为止,这是我的dockerfile:

FROM ubuntu:latest

RUN apt-get update && apt-get install -y \
python-pip

RUN pip install --upgrade pip && pip install jupyter \
pandas \
numpy

RUN useradd -r -g users A && \
mkdir /myhome && \
chown -R A:users /myhome

EXPOSE 8888

WORKDIR /myhome

CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0"]

我通过执行docker run -it -p 8888:8888 -u="A" -v /some/host/files:/myhome

来运行此操作

但后来我得到一个jupyter错误,上面写着OSError: [Errno 13] Permission denied: '/home/A' 任何帮助表示感谢。非常感谢!

1 个答案:

答案 0 :(得分:0)

使用--entrypoint = bash启动容器时,您会发现尚未创建用户的主目录/ home / A.为此,您需要将-m标志添加到useradd命令

更多信息:您可能想要查看docker-stacks项目(https://github.com/jupyter/docker-stacks/tree/master/base-notebook和派生图像)。这似乎与您尝试做的事情相匹配,并添加了一些其他有用的东西。例如。当运行码头化的jupyter时,你需要一个" PID 1收割机&#34 ;;否则你退出的笔记本内核会变成僵尸(你可以谷歌那样: - )

此外,在容器内部与非root用户共享主机文件时,通常需要将容器用户的UID设置为与主机系统匹配的某个特定值,以便正确匹配文件系统权限。 docker-stacks容器也支持它。他们的Dockerfiles至少可以帮助你自己运行。