Docker 为什么JupyterHub内核不与kernel.json对齐?

Docker 为什么JupyterHub内核不与kernel.json对齐?,docker,jupyter-notebook,Docker,Jupyter Notebook,我正在使用DockerSpawner的SystemUserSpawner()生成docker容器来运行笔记本 这些容器中的Jupyter是在Python3上运行的,现在我正在尝试向其添加Python2内核 RUN pip3.6 --no-cache install \ jupyterhub==0.9.0 \ 'notebook>=5.0,<=6.0' ... RUN python2 -m pip install --upgrade pip RUN python2 -m

我正在使用DockerSpawner的SystemUserSpawner()生成docker容器来运行笔记本

这些容器中的Jupyter是在Python3上运行的,现在我正在尝试向其添加Python2内核

RUN pip3.6 --no-cache install \
    jupyterhub==0.9.0 \
    'notebook>=5.0,<=6.0'
...
RUN python2 -m pip install --upgrade pip
RUN python2 -m pip --no-cache install 'ipython<6'
RUN python2 -m pip --no-cache install ipykernel
看看这个容器中的可用内核,一切似乎都很好:

[zoltan.fedor@7a30bb98f7c0 ~]$ jupyter kernelspec list
Available kernels:
  python2    /usr/share/jupyter/kernels/python2
  python3    /usr/share/jupyter/kernels/python3
但实际内核文件是相同的(标题除外):

还有Python 3:

vi /usr/share/jupyter/kernels/python3/kernel.json
----
{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}
简单地运行“python”就会出现python 2—它应该:

[zoltan.fedor@7a30bb98f7c0 ~]$ python
Python 2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
那么,为什么这两个内核都在运行Python 3呢?如果有的话,那么我会看到他们都运行Python2,因为他们使用“python”作为“argv”,它应该启动Python2.7.5而不是3.6.5


你知道我在这里遗漏了什么吗

事实证明,问题仅仅是我忘了运行以下程序

RUN python2 -m ipykernel install
奇怪的是,python2 kernel.json是在没有它的情况下创建的,它只是没有设置为执行python2。 在此之后,python2内核现在指向:

$ jupyter kernelspec list
Available kernels:
  python2    /usr/local/share/jupyter/kernels/python2
  python3    /usr/share/jupyter/kernels/python3
kernel.json的内容是:

$ vi /usr/local/share/jupyter/kernels/python2/kernel.json
----
{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ]
}
现在这真的是一个Python2内核

$ jupyter kernelspec list
Available kernels:
  python2    /usr/local/share/jupyter/kernels/python2
  python3    /usr/share/jupyter/kernels/python3
$ vi /usr/local/share/jupyter/kernels/python2/kernel.json
----
{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ]
}