-->

How to dockerize Jupyter lab

2019-02-09 20:35发布

问题:

I'm trying to dockerize the Jupyter Lab and so I tried to create a Dockerfile as below,

FROM python:3.6

WORKDIR /jup

RUN pip install jupyter -U && pip install jupyterlab

EXPOSE 8888

ENTRYPOINT ["jupyter", "lab"]


and run the commands, docker build . -t jupyter then docker run jupyter. But unfortunately I got some error as below

[I 07:56:34.123 LabApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
Traceback (most recent call last):
  File "/usr/local/bin/jupyter-lab", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/traitlets/config/application.py", line 657, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "/usr/local/lib/python3.6/site-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/notebook/notebookapp.py", line 1507, in initialize
    self.init_webapp()
  File "/usr/local/lib/python3.6/site-packages/notebook/notebookapp.py", line 1297, in init_webapp
    self.http_server.listen(port, self.ip)
  File "/usr/local/lib/python3.6/site-packages/tornado/tcpserver.py", line 142, in listen
    sockets = bind_sockets(port, address=address)
  File "/usr/local/lib/python3.6/site-packages/tornado/netutil.py", line 197, in bind_sockets
    sock.bind(sockaddr)
OSError: [Errno 99] Cannot assign requested address


How can I dockerize jupyter lab ? [ by solving this error ]

回答1:

When you start jupyter lab you should define --ip parameter. For example, --ip=0.0.0.0.

After this you will have another error:

[C 08:14:56.973 LabApp] Running as root is not recommended. Use --allow-root to bypass.

So, if you want to proceed you need to add --allow-root as well.

The final Dockerfile is:

FROM python:3.6

WORKDIR /jup

RUN pip install jupyter -U && pip install jupyterlab

EXPOSE 8888

ENTRYPOINT ["jupyter", "lab","--ip=0.0.0.0","--allow-root"]


回答2:

Whilst searching around I came across this question, before going on to discover a reference to Jupyter Labs in the 'Read The Docs' pages for Jupyter Docker Stacks (see here). The documentation says:

JupyterLab is preinstalled as a notebook extension starting in tag c33a7dc0eece.

and they suggest using a command like:

docker run -it --rm -p 8888:8888 jupyter/datascience-notebook start.sh jupyter lab

I thought I might as well add the reference here in case it's useful for others. (It's not immediately obvious on Docker Hub for example, that there is support for Jupyter Labs.)



回答3:

either run
docker run jupyter --allow-root --ip=0.0.0.0 --port=8888 or change ENTRYPOINT as
ENTRYPOINT ["jupyter", "lab", "--allow-root","--ip=0.0.0.0", "--no-browser"]