jupyter / docker-stacks

Ready-to-run Docker images containing Jupyter applications

Home Page:https://jupyter-docker-stacks.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pluto Notebook problem

andreasskeidsvoll opened this issue · comments

What docker image(s) are you using?

datascience-notebook

Host OS system

Rocky Linux 8.6

Host architecture

x86_64

What Docker command are you running?

Used as singleuser image in customized zero-to-jupyterhub-k8s Helm chart.

How to Reproduce the problem?

Problem occurs when I click the Pluto Notebook link in the JupyterLab Launcher. This does not occur in the 2023-09-11 image, as suggested in this comment
.

Command output

No response

Expected behavior

No response

Actual behavior

The Pluto Notebook interface doesn't work properly, and it seems to be failing when loading different components:
image

I also get 500 : Internal Server Error when trying to create new Pluto notebooks, The behavior matches the one seen in this issue.

When I click the Pluto Notebook link in the Launcher, I also get variants of the following log message:

[341] signal (4.2): Illegal instruction
in expression starting at none:1
isabsent at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:239 [inlined]
formaturi at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:250
jfptr_formaturi_8986 at /opt/julia/compiled/v1.9/Pluto/OJqMt_idFnG.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:730
uristring at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:262
uristring at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:264 [inlined]
string at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:236 [inlined]
pretty_address at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:370
unknown function (ip: 0x7f7e82b0d4a3)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
run! at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:305
run at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:139 [inlined]
run at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:63 [inlined]
#run#438 at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:58
run at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:56
unknown function (ip: 0x7f7ed4301012)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_call at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:126
eval_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:226
eval_stmt_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:177 [inlined]
eval_body at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:624
jl_interpret_toplevel_thunk at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:762
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:912
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
ijl_toplevel_eval_in at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:971
eval at ./boot.jl:370 [inlined]
exec_options at ./client.jl:280
_start at ./client.jl:522
jfptr__start_40034.clone_1 at /opt/julia-1.9.3/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
true_main at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:573
jl_repl_entrypoint at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:717
main at julia (unknown line)
unknown function (ip: 0x7f82cddd5d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 11818924 (Pool: 11809192; Big: 9732); GC: 17

Anything else?

No response

Latest Docker version

  • I've updated my Docker version to the latest available, and the issue still persists

Thanks for creating an issue!

docker run -it --rm -p 8888:8888 --pull always quay.io/jupyter/datascience-notebook:2023-10-23 also gives you an error, right?
I want to make sure the problem has nothing to do with JupyterHub, mounts, and your custom config.

Thank you for the quick response! I first encountered the problem on Kubernetes based-Rocky Linux cluster, but the same issue also occurs on my laptop with Ubuntu 22.04. I had to add always after the command you suggested to make it work. When I did, I encountered the same issue as before, with the following output from the container (the signal (4.2): Illegal instruction error repeats after the HTTP errors):

[I 2023-10-24 06:34:27.204 ServerApp] Skipped non-installed server(s): bash-language-server, dockerfile-language-server-nodejs, javascript-typescript-langserver, jedi-language-server, julia-language-server, pyright, python-language-server, python-lsp-server, r-languageserver, sql-language-server, texlab, typescript-language-server, unified-language-server, vscode-css-languageserver-bin, vscode-html-languageserver-bin, vscode-json-languageserver-bin, yaml-language-server
0.00s - Debugger warning: It seems that frozen modules are being used, which may
0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
0.00s - to python to disable frozen modules.
0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
[W 2023-10-24 06:34:52.239 LabApp] The extension "nbdime-jupyterlab" is outdated.
    
[I 2023-10-24 06:34:52.240 LabApp] Build is up to date
[ Info: Loading...
Invalid instruction at 0x7fc8a0672ffb: 0x62, 0xd2, 0xfd, 0x08, 0x29, 0x87, 0x08, 0x00, 0x00, 0x00, 0xc4, 0xe3, 0x79, 0x30, 0xc8

[137] signal (4.2): Illegal instruction
in expression starting at none:1
isabsent at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:239 [inlined]
formaturi at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:250
jfptr_formaturi_8986 at /opt/julia/compiled/v1.9/Pluto/OJqMt_idFnG.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:730
uristring at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:262
uristring at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:264 [inlined]
string at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:236 [inlined]
pretty_address at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:370
unknown function (ip: 0x7fc8a7b0c2d3)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
run! at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:305
run at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:139 [inlined]
run at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:63 [inlined]
#run#438 at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:58
run at /opt/julia/packages/Pluto/m1yzB/src/webserver/WebServer.jl:56
unknown function (ip: 0x7fc8a9214012)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_call at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:126
eval_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:226
eval_stmt_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:177 [inlined]
eval_body at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:624
jl_interpret_toplevel_thunk at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:762
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:912
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
ijl_toplevel_eval_in at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:971
eval at ./boot.jl:370 [inlined]
exec_options at ./client.jl:280
_start at ./client.jl:522
jfptr__start_40034.clone_1 at /opt/julia-1.9.3/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
true_main at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:573
jl_repl_entrypoint at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:717
main at julia (unknown line)
unknown function (ip: 0x7fc8dd1a5d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 11821635 (Pool: 11811905; Big: 9730); GC: 17
[E 2023-10-24 06:35:00.289 ServerApp] Uncaught exception GET /pluto/editor.4a598bb8.js (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/editor.4a598bb8.js', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
        bytes_read = self.read_from_fd(buf)
                     ^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1116, in read_from_fd
        return self.socket.recv_into(buf, len(buf))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
[E 2023-10-24 06:35:00.299 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "*/*",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.299 ServerApp] 500 GET /pluto/editor.4a598bb8.js (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 244.50ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.300 ServerApp] Uncaught exception GET /pluto/editor.b8046adf.css (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/editor.b8046adf.css', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
        bytes_read = self.read_from_fd(buf)
                     ^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1116, in read_from_fd
        return self.socket.recv_into(buf, len(buf))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
[E 2023-10-24 06:35:00.301 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "text/css,*/*;q=0.1",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.301 ServerApp] 500 GET /pluto/editor.b8046adf.css (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 245.47ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.301 ServerApp] Uncaught exception GET /pluto/vollkorn.089565a8.css (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/vollkorn.089565a8.css', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
        bytes_read = self.read_from_fd(buf)
                     ^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1116, in read_from_fd
        return self.socket.recv_into(buf, len(buf))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
[E 2023-10-24 06:35:00.303 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "text/css,*/*;q=0.1",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.303 ServerApp] 500 GET /pluto/vollkorn.089565a8.css (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 247.02ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.303 ServerApp] Uncaught exception GET /pluto/editor.b8733d72.js (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/editor.b8733d72.js', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
        bytes_read = self.read_from_fd(buf)
                     ^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1116, in read_from_fd
        return self.socket.recv_into(buf, len(buf))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
[E 2023-10-24 06:35:00.305 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "*/*",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.305 ServerApp] 500 GET /pluto/editor.b8733d72.js (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 246.24ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.305 ServerApp] Uncaught exception GET /pluto/juliamono.c6034ab4.css (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/juliamono.c6034ab4.css', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
        bytes_read = self.read_from_fd(buf)
                     ^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1116, in read_from_fd
        return self.socket.recv_into(buf, len(buf))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
[E 2023-10-24 06:35:00.306 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "text/css,*/*;q=0.1",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.306 ServerApp] 500 GET /pluto/juliamono.c6034ab4.css (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 248.03ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.306 ServerApp] Uncaught exception GET /pluto/editor.9f9dc874.js (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/editor.9f9dc874.js', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
        bytes_read = self.read_from_fd(buf)
                     ^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1116, in read_from_fd
        return self.socket.recv_into(buf, len(buf))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
[E 2023-10-24 06:35:00.308 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "*/*",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.308 ServerApp] 500 GET /pluto/editor.9f9dc874.js (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 249.41ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.314 ServerApp] Uncaught exception GET /pluto/index.a096377a.css (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/index.a096377a.css', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/tcpclient.py", line 142, in on_connect_done
        stream = future.result()
                 ^^^^^^^^^^^^^^^
    tornado.iostream.StreamClosedError: Stream is closed
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1181, in connect
        self.socket.connect(address)
    OSError: [Errno 99] Cannot assign requested address
[E 2023-10-24 06:35:00.315 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "text/css,*/*;q=0.1",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.315 ServerApp] 500 GET /pluto/index.a096377a.css (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 6.55ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.315 ServerApp] Uncaught exception GET /pluto/index.420fa7f8.css (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/index.420fa7f8.css', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/tcpclient.py", line 142, in on_connect_done
        stream = future.result()
                 ^^^^^^^^^^^^^^^
    tornado.iostream.StreamClosedError: Stream is closed
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1181, in connect
        self.socket.connect(address)
    OSError: [Errno 99] Cannot assign requested address
[E 2023-10-24 06:35:00.317 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "text/css,*/*;q=0.1",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.317 ServerApp] 500 GET /pluto/index.420fa7f8.css (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 6.39ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.317 ServerApp] Uncaught exception GET /pluto/index.45deefc0.js (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/index.45deefc0.js', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/tcpclient.py", line 142, in on_connect_done
        stream = future.result()
                 ^^^^^^^^^^^^^^^
    tornado.iostream.StreamClosedError: Stream is closed
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1181, in connect
        self.socket.connect(address)
    OSError: [Errno 99] Cannot assign requested address
[E 2023-10-24 06:35:00.318 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "*/*",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.318 ServerApp] 500 GET /pluto/index.45deefc0.js (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 7.65ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.318 ServerApp] Uncaught exception GET /pluto/editor.8a3292da.js (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/editor.8a3292da.js', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/tcpclient.py", line 142, in on_connect_done
        stream = future.result()
                 ^^^^^^^^^^^^^^^
    tornado.iostream.StreamClosedError: Stream is closed
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1181, in connect
        self.socket.connect(address)
    OSError: [Errno 99] Cannot assign requested address
[E 2023-10-24 06:35:00.320 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "*/*",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.320 ServerApp] 500 GET /pluto/editor.8a3292da.js (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 9.46ms referer=http://127.0.0.1:8888/pluto/
[E 2023-10-24 06:35:00.322 ServerApp] Uncaught exception GET /pluto/logo.004c1d7c.svg (172.17.0.1)
    HTTPServerRequest(protocol='http', host='127.0.0.1:8888', method='GET', uri='/pluto/logo.004c1d7c.svg', version='HTTP/1.1', remote_ip='172.17.0.1')
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/tcpclient.py", line 142, in on_connect_done
        stream = future.result()
                 ^^^^^^^^^^^^^^^
    tornado.iostream.StreamClosedError: Stream is closed
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/web.py", line 1786, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/websocket.py", line 111, in get
        return await self.http_get(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 675, in http_get
        return await ensure_async(self.proxy(self.port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 849, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 672, in proxy
        return await ensure_async(super().proxy(port, path))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async
        result = await obj
                 ^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 354, in proxy
        response = await client.fetch(req, raise_error=False)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/iostream.py", line 1181, in connect
        self.socket.connect(address)
    OSError: [Errno 99] Cannot assign requested address
[E 2023-10-24 06:35:00.324 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "image/avif,image/webp,*/*",
      "Referer": "http://127.0.0.1:8888/pluto/",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0"
    }
[E 2023-10-24 06:35:00.325 ServerApp] 500 GET /pluto/logo.004c1d7c.svg (2812bb01c0ea469e96c6a792d336aa08@172.17.0.1) 3.35ms referer=http://127.0.0.1:8888/pluto/

I'm seeing this same issue, but only when running on docker via Windows WSL2. The image works perfectly fine on my Macbook Pro (M1).

Works fine on my M2 MacBook Air too.
Most likely onle x86_64 issue is affected.

Not sure if helpful, but when creating a Jupyter Notebook with a Julia kernel, the following error appears in the logs:

Starting kernel event loops.
KERNEL EXCEPTION[I 2023-10-26 22:33:10.300 ServerApp] Adapting from protocol version 5.0 (kernel 64ecfcf8-8084-4b40-b111-e1e8702f1235) to 5.3 (client).
[I 2023-10-26 22:33:10.301 ServerApp] Connecting to kernel 64ecfcf8-8084-4b40-b111-e1e8702f1235.
[I 2023-10-26 22:33:10.315 ServerApp] Adapting from protocol version 5.0 (kernel 64ecfcf8-8084-4b40-b111-e1e8702f1235) to 5.3 (client).
[I 2023-10-26 22:33:10.316 ServerApp] Connecting to kernel 64ecfcf8-8084-4b40-b111-e1e8702f1235.
[I 2023-10-26 22:33:10.329 ServerApp] Adapting from protocol version 5.0 (kernel 64ecfcf8-8084-4b40-b111-e1e8702f1235) to 5.3 (client).
[I 2023-10-26 22:33:10.330 ServerApp] Connecting to kernel 64ecfcf8-8084-4b40-b111-e1e8702f1235.

KeyError: key "usage_request" not found

Stacktrace:
 [1] getindex(h::Dict{String, Function}, key::String)
   @ Base ./dict.jl:484
 [2] eventloop(socket::ZMQ.Socket)
   @ IJulia /opt/julia/packages/IJulia/Vo51o/src/eventloop.jl:8
 [3] (::IJulia.var"#14#17")()
   @ IJulia ./task.jl:514

Code seems to execute without issue in the notebook. I don't see this error message in the logs when Pluto loads correctly on my M1 system.

@yuvipanda I think you have some experience with Julia and Pluto, could you please take a look here?

@andreasskeidsvoll I know it's not a solution for the issue, but could you please check the issue persists in the latest image?
As far as I remember, the issue was quite spurious, so newer images might work.

@mathbunnyru For the newest x86 (quay.io/jupyter/datascience-notebook:x86_64-2023-11-07) and multiarch (quay.io/jupyter/datascience-notebook:2023-11-07) images on my laptop, I get the following warnings and errors after clicking the Pluto Notebook link and waiting for about a minute:

[W 2023-11-07 07:28:14.641 LabApp] The extension "nbdime-jupyterlab" is outdated.
    
[I 2023-11-07 07:28:14.641 LabApp] Build is up to date
[W 2023-11-07 07:29:21.256 ServerApp] 500 GET /pluto/ (172.17.0.1): could not start pluto in time
[E 2023-11-07 07:29:21.270 ServerApp] {
      "Host": "127.0.0.1:8888",
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
      "Referer": "http://127.0.0.1:8888/lab",
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0"
    }
[E 2023-11-07 07:29:21.270 ServerApp] 500 GET /pluto/ (a48e040be7b34e65b5d0063c2e0c5c65@172.17.0.1) 60025.04ms referer=http://127.0.0.1:8888/lab

together with a 500 : Internal Server Error in the tab that gets opened in my browser. However, Pluto seems to work when following the link again after about five minutes after the first attempt. It's a bit hard to know exactly what happens, as nothing shows up in the logs, but, maybe the Pluto startup is just very slow on my system (which is a decent x86 laptop from 2020 with Ubuntu) while there is a request timeout of about a minute and the startup progress is not shown anywhere?

Note that I still get the following error the first time a new notebook is created inside Pluto, but the error resolves itself:

[E 2023-11-07 07:32:25.605 ServerApp] Uncaught exception
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.11/site-packages/tornado/websocket.py", line 630, in _run_callback
        result = callback(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/websocket.py", line 1519, in on_message
        return self._on_message(message)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/opt/conda/lib/python3.11/site-packages/tornado/websocket.py", line 1525, in _on_message
        self._on_message_callback(message)
      File "/opt/conda/lib/python3.11/site-packages/jupyter_server_proxy/handlers.py", line 477, in message_cb
        self.write_message(message, binary=isinstance(message, bytes))
      File "/opt/conda/lib/python3.11/site-packages/tornado/websocket.py", line 331, in write_message
        raise WebSocketClosedError()
    tornado.websocket.WebSocketClosedError
[I 2023-11-07 07:32:25.686 ServerApp] Websocket connection established to ws://localhost:44965/

Also, notebooks created in previous runs of Pluto still show up in the Pluto interface, but these notebooks seem to be missing from the container as I get the following error when trying to enter any of them:

Can't find a file here

Please check whether /opt/julia/pluto_notebooks/notebook_name.jl exists.

I also can't see any way of removing these dysfunctional notebook links in Pluto, but this is perhaps an issue with Pluto and not just the docker-stacks image in particular...

I'm going to have to try figure out how to run these properly on x86 and then can try to repro these (currently only have an ARM mac)

I almost forgot - docker on Mac (I have M2 mac) allows to run x86_64 images.

For example: docker run -it --rm -p 8888:8888 quay.io/jupyter/datascience-notebook:x86_64-2023-11-07will work and will pull x86_64 image (this tag is not multi-arch).

I also got 500 errors a few times when I launch Pluto from Launcher.
But after a few tries pluto starts and works fine for me.
So, yeah, x86_64 Linux image works better on aarch64 M2 Mac rather then on x86_64 Linux.
When I press Ctrl+C though, I get Segmentation fault though.

If I run aarch64 image, Pluto starts in approximately 45 seconds.

Also, notebooks created in previous runs of Pluto still show up in the Pluto interface

I have this problem too, even with no mounts and after running images for different archs.
Pluto probably stores this information as a cookie in the browser.
The private tab doesn't show missing notebooks.
I think this is a minor problem and is definitely part of Pluto (not docker images).

@andreasskeidsvoll can you tell me what happens if you just load a terminal (instead of pluto) and run the following:

julia --optimize=0 -e            "import Pluto; Pluto.run(host=\"0.0.0.0\", port=8888, launch_browser=false, require
_secret_for_open_links=false, require_secret_for_access=false)"

I tried this on an x86 container, and at least it didn't segfault! I couldn't access anything in a browser yet (my machine is being wonky about port forwarding :(), but can you tell me if this command already segfaults for you?

@yuvipanda I ran the command in the terminal for a notebook started with docker run -it --rm -p 8888:8888 --pull always quay.io/jupyter/datascience-notebook:2023-11-07, but got a conflict with the 8888 port already in use (error Cannot listen on port 8888. It may already be in use, or you may not have sufficient permissions. Use Pluto.run() to automatically select an available port. So, I reran without the port=8888 argument, and got the following error:

(base) jovyan@8f86f5db705a:~$ julia --optimize=0 -e            "import Pluto; Pluto.run(host=\"0.0.0.0\", launch_browser=false, require_secret_for_open_links=false, require_secret_for_access=false)"
[ Info: Loading...
Invalid instruction at 0x7ff2c8a6bf4b: 0x62, 0xd2, 0xfd, 0x08, 0x29, 0x87, 0x08, 0x00, 0x00, 0x00, 0xc4, 0xe3, 0x79, 0x30, 0xc8

[221] signal (4.2): Illegal instruction
in expression starting at none:1
isabsent at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:239 [inlined]
formaturi at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:250
jfptr_formaturi_8684 at /opt/julia/compiled/v1.9/Pluto/OJqMt_idFnG.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:730
uristring at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:262
uristring at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:264 [inlined]
string at /opt/julia/packages/URIs/7Tg5r/src/URIs.jl:236 [inlined]
pretty_address at /opt/julia/packages/Pluto/xrip8/src/webserver/WebServer.jl:370
unknown function (ip: 0x7ff2d133a183)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
run! at /opt/julia/packages/Pluto/xrip8/src/webserver/WebServer.jl:305
run at /opt/julia/packages/Pluto/xrip8/src/webserver/WebServer.jl:139 [inlined]
run at /opt/julia/packages/Pluto/xrip8/src/webserver/WebServer.jl:63 [inlined]
#run#438 at /opt/julia/packages/Pluto/xrip8/src/webserver/WebServer.jl:58
run at /opt/julia/packages/Pluto/xrip8/src/webserver/WebServer.jl:56
unknown function (ip: 0x7ff2d1240ed2)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_call at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:126
eval_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:226
eval_stmt_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:177 [inlined]
eval_body at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:624
jl_interpret_toplevel_thunk at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:762
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:912
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
ijl_toplevel_eval_in at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:971
eval at ./boot.jl:370 [inlined]
exec_options at ./client.jl:280
_start at ./client.jl:522
jfptr__start_40034.clone_1 at /opt/julia-1.9.3/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
true_main at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:573
jl_repl_entrypoint at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:717
main at julia (unknown line)
unknown function (ip: 0x7ff3054ffd8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 11886025 (Pool: 11876599; Big: 9426); GC: 17
Illegal instruction (core dumped)

When I do the same in the new image quay.io/jupyter/datascience-notebook:2023-11-20, I don't get the above error. Instead, Pluto seems to start up in ~2 minutes with the command, with the following information:

(base) jovyan@e1e87ef5d522:~$ julia --optimize=0 -e            "import Pluto; Pluto.run(host=\"0.0.0.0\", launch_browser=false, require_secret_for_open_links=false, require_secret_for_access=false)"
[ Info: Loading...
┌ Info: 
└ Go to http://0.0.0.0:1234/ in your browser to start writing ~ have fun!
┌ Info: 
│ Press Ctrl+C in this terminal to stop Pluto

I'm not able to access Pluto via the provided address http://0.0.0.0:1234/.

Otherwise, the startup time of the server still seems to be too long for the Pluto Notebook launcher, but the new version has the more informative error message below when timing out:
Screenshot from 2023-11-20 09-21-38

Well, I worked on adding a unit test to check that pluto does launch, and then turns out it's already there :D So it means we have x86 tests that are passing for starting up pluto successfully, but then failing when done manually. This is very interesting!

I now have properly setup an x86 docker, both on my mac as well as on a linux machine I just resurrected, and can confirm I can see the 'can not start pluto in time' on both, timing out after 1 minute.

So on my linux machine, without any virtualization, I did the following:

$ docker run -it quay.io/jupyter/julia-notebook:latest /bin/bash
(base) jovyan@532554:+$ time julia --optimize=0 -e 'import Pluto'

real 1m21.972s
user 1m17.0412
sys.  0m5.653s

So on a non-virtualized, fairly powerful x86 laptop, just doing import Pluto takes more than a full minute by quite a bit! So that explains the current failure.

Now, running the same import command a second time works much faster. I looked into the precompiled packages (under JULIA_DEPOT_PATH) and found the following:

/opt/julia/compiled/v1.9/Pluto/OJqMt_idFnG.ji
/opt/julia/compiled/v1.9/Pluto/OJqMt_idFnG.so
/opt/julia/compiled/v1.9/Pluto/OJqMt_FDQT2.so
/opt/julia/compiled/v1.9/Pluto/OJqMt_FDQT2.ji

However, only the first two were present in a clean image without having attempted an import!

We do call Pkg.precompile() when setting up these images, but apparently somehow they're still being recompiled again on first startup, hence causing these issues.

You can recreate this by doing time julia -e "import HDF5" as well. Takes forever.

So the core of the issue here is that the precompilation we do at build time is currently just being ignored at runtime.

Is it possible fix-permissions is changing the file metadata and invalidating the pre-compile outputs?

I tested this on arch, and the problem does not happen

(base) jovyan@8657b8763127:~$ ls /opt/julia/compiled/v1.9/Pluto/
OJqMt_idFnG.ji  OJqMt_idFnG.so
(base) jovyan@8657b8763127:~$ time julia -e 'import Pluto'

real    0m0.889s
user    0m0.776s
sys     0m0.196s
(base) jovyan@8657b8763127:~$ ls /opt/julia/compiled/v1.9/Pluto/
OJqMt_idFnG.ji  OJqMt_idFnG.so

So the issue seems to be that the compiled files don't work for x86, but do work for arm64.

So funny, I'm used to arm being the problem architecture, not x86.

I'll try taking out fix-permission @manics but due to it working fine on arm I doubt that's the issue

So I was wondering why the GitHub action succeeds but it fails locally.

I now have an answer!

If I build my x86 image locally, and then run it, I get:

❯ docker run -it -p 8888:8888 quay.io/jupyter/julia-notebook:latest /bin/bash
(base) jovyan@b1a7c0da96b7:~$ ls /opt/julia/compiled/v1.9/Pluto/
OJqMt_idFnG.ji  OJqMt_idFnG.so
(base) jovyan@b1a7c0da96b7:~$ time julia -e "import Pluto;"

real    0m9.157s
user    0m8.301s
sys     0m1.113s
(base) jovyan@b1a7c0da96b7:~$ ls /opt/julia/compiled/v1.9/Pluto/
OJqMt_idFnG.ji  OJqMt_idFnG.so
(base) jovyan@b1a7c0da96b7:~$ 

So basically if I'm running the image on exactly the same CPU as what it was built on, the precompiled version is used and not recompiled! It's not just architecture specific, but CPU specific.

I think #2044 should fix this, and fix the segfaults too. I think the segfaults may have been dependent on wether the host on github actions that built the image matched what CPU you were on when trying to run it, and since github actions doesn't guarantee this, it makes sense this would be different each time.

@andreasskeidsvoll can you try the latest images, built after #2044 is merged? I think that should fix both the segfaults and the failure to start issues.

I've tested the latest images now, and the startup failure issue is now gone. Thank you for looking into this!

Thanks for reporting it, and thanks for patiently working through those issues, @andreasskeidsvoll!