【发布时间】:2018-10-29 08:24:47
【问题描述】:
我们正在尝试在我们的 jupyterhub 用于单用户服务器的 docker 映像中以 root 身份运行 docker 入口点。我们需要 root 添加一个主机,以从其域在 K8S 上运行的 jupyterhub 上的单个用户 jupyter notebook 服务器内访问内部 git 注册表。
我们已经尝试将域添加到 docker 映像中的 /etc/hosts 文件,该文件由我们的 jupyterhub 在 docker-entrypoint 脚本中为单用户服务器加载(代码可以在底部看到)。
但是,当我们尝试添加主机时,我们得到一个权限被拒绝。 打印输出还说明了原因:
在本地,第一个 whoami 显示 root ,正如我们预期的那样。
然而,在我们的 jupyterhub(在 K8s 上运行)在一个 pod 中启动的 jupyter notebook 上,第一个打印输出已经显示 jovyan。
直接在Dockerfile的入口点打印出whoami也可以看到同样的效果:
ENTRYPOINT ["sh", "-c", "echo $(whoami)"]
这意味着它是整个入口点,它不会以 root 身份执行,但会事先以某种方式切换用户。
我们可以防止这种行为还是有好的解决方法?
任何帮助表示赞赏,在此先感谢您!
PS:
此外,当我们尝试在 jupyterhub 的入口点脚本中运行 exec su - "jovyan" 时,我们会收到错误消息,即必须从终端运行 su 命令。在本地它可以正常工作。
docker-entrypoint脚本代码(仅供参考):
Dockerfile:
FROM jupyter/datascience-notebook:1145fb1198b2
WORKDIR /usr/src/app
USER root
...
COPY aai-entrypoint.sh /usr/src/app/aai-entrypoint.sh
RUN chmod +x /usr/src/app/aai-entrypoint.sh
ENTRYPOINT ["sh", "/usr/src/app/my-entrypoint.sh"]
CMD ""
我们添加了空 CMD 来覆盖 jupyter base-notebook 的 CMD
my-entrypoint.sh:
#!/bin/bash
echo $(whoami)
echo "xx.xxx.xxx our.domain.com" >> /etc/hosts
echo "test"
exec su - "jovyan"
echo $(whoami)
# to not overwrite the entrypoint of the jupyter/base-notebook
# see https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile
exec tini -g -- "start-notebook.sh"
【问题讨论】:
标签: docker jupyter-notebook dockerfile jupyter jupyterhub