diff --git a/images/base-notebook/docker_healthcheck.py b/images/base-notebook/docker_healthcheck.py index 8f3338e8..7dd3de02 100755 --- a/images/base-notebook/docker_healthcheck.py +++ b/images/base-notebook/docker_healthcheck.py @@ -3,6 +3,7 @@ # Distributed under the terms of the Modified BSD License. import json import os +import subprocess from pathlib import Path import requests @@ -10,7 +11,19 @@ import requests # Several operations below deliberately don't check for possible errors # As this is a healthcheck, it should succeed or raise an exception on error -runtime_dir = Path("/home/") / os.environ["NB_USER"] / ".local/share/jupyter/runtime/" +# Docker runs healtchecks using an exec +# It uses the default user configured when running the image: root for the case of a custom NB_USER or jovyan for the case of the default image user. +# We manually change HOME to make `jupyter --runtime-dir` report a correct path +# More information: +result = subprocess.run( + ["jupyter", "--runtime-dir"], + check=True, + capture_output=True, + text=True, + env=dict(os.environ) | {"HOME": "/home/" + os.environ["NB_USER"]}, +) +runtime_dir = Path(result.stdout.rstrip()) + json_file = next(runtime_dir.glob("*server-*.json")) url = json.loads(json_file.read_bytes())["url"] diff --git a/tests/base-notebook/test_healthcheck.py b/tests/base-notebook/test_healthcheck.py index 50d83c27..450a0111 100644 --- a/tests/base-notebook/test_healthcheck.py +++ b/tests/base-notebook/test_healthcheck.py @@ -42,6 +42,16 @@ LOGGER = logging.getLogger(__name__) ["start-notebook.py", "--ServerApp.base_url=/test"], "root", ), + (["JUPYTER_RUNTIME_DIR=/tmp/jupyter-runtime"], ["start-notebook.sh"], None), + ( + [ + "NB_USER=testuser", + "CHOWN_HOME=1", + "JUPYTER_RUNTIME_DIR=/tmp/jupyter-runtime", + ], + ["start-notebook.sh"], + "root", + ), ], ) def test_health(