-
Notifications
You must be signed in to change notification settings - Fork 388
Open
Labels
Description
Bug description
As a quick disclaimer, I haven't noticed any problems resulting from this...but just in case something is lurking in the shadows i wanted to share a heads up
When using the basic-example jhub from this repository (some minor changes made), debug logs show "No user identified".
How to reproduce
- run
docker compose up - log in as admin
- run
docker logs -f jupyter-admin - observe output that periodically shows "No user identified"
Expected behaviour
Either there would not be a message that is thrown with that warning, or a more clear cause would be raised to direct corrective action.
Actual behaviour
"No user identified" is in logs but no apparent impacts functionality is observed that indicates any problems.
Your personal set up
- OS: AWS EC2 - RHEL 9
- Version(s): tested with jupyterhub
5.3.0andlatest. miniforge python version3.12.9
Full environment
# paste output of `pip freeze` or `conda list` here
$ conda list
# packages in environment at /home/ec2/miniforge3:
#
# Name Version Build Channel
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_gnu conda-forge
archspec 0.2.5 pyhd8ed1ab_0 conda-forge
boltons 24.0.0 pyhd8ed1ab_1 conda-forge
brotli-python 1.1.0 py312h2ec8cdc_2 conda-forge
bzip2 1.0.8 h4bc722e_7 conda-forge
c-ares 1.34.4 hb9d3cd8_0 conda-forge
ca-certificates 2025.6.15 hbd8a1cb_0 conda-forge
certifi 2025.6.15 pyhd8ed1ab_0 conda-forge
cffi 1.17.1 py312h06ac9bb_0 conda-forge
charset-normalizer 3.4.1 pyhd8ed1ab_0 conda-forge
colorama 0.4.6 pyhd8ed1ab_1 conda-forge
conda 24.11.3 py312h7900ff3_0 conda-forge
conda-libmamba-solver 24.9.0 pyhd8ed1ab_0 conda-forge
conda-package-handling 2.4.0 pyh7900ff3_2 conda-forge
conda-package-streaming 0.11.0 pyhd8ed1ab_1 conda-forge
curl 8.14.1 h332b0f4_0 conda-forge
distro 1.9.0 pyhd8ed1ab_1 conda-forge
fmt 11.0.2 h434a139_0 conda-forge
frozendict 2.4.6 py312h66e93f0_0 conda-forge
h2 4.2.0 pyhd8ed1ab_0 conda-forge
hpack 4.1.0 pyhd8ed1ab_0 conda-forge
hyperframe 6.1.0 pyhd8ed1ab_0 conda-forge
icu 75.1 he02047a_0 conda-forge
idna 3.10 pyhd8ed1ab_1 conda-forge
jsonpatch 1.33 pyhd8ed1ab_1 conda-forge
jsonpointer 3.0.0 py312h7900ff3_1 conda-forge
keyutils 1.6.1 h166bdaf_0 conda-forge
krb5 1.21.3 h659f571_0 conda-forge
ld_impl_linux-64 2.43 h712a8e2_4 conda-forge
libarchive 3.7.7 h4585015_3 conda-forge
libcurl 8.14.1 h332b0f4_0 conda-forge
libedit 3.1.20250104 pl5321h7949ede_0 conda-forge
libev 4.33 hd590300_2 conda-forge
libexpat 2.6.4 h5888daf_0 conda-forge
libffi 3.4.6 h2dba641_0 conda-forge
libgcc 14.2.0 h767d61c_2 conda-forge
libgcc-ng 14.2.0 h69a702a_2 conda-forge
libgomp 14.2.0 h767d61c_2 conda-forge
libiconv 1.18 h4ce23a2_1 conda-forge
liblzma 5.6.4 hb9d3cd8_0 conda-forge
libmamba 1.5.12 h49b8a8d_0 conda-forge
libmambapy 1.5.12 py312hbaee817_0 conda-forge
libnghttp2 1.64.0 h161d5f1_0 conda-forge
libnsl 2.0.1 hd590300_0 conda-forge
libsolv 0.7.30 h3509ff9_0 conda-forge
libsqlite 3.49.1 hee588c1_1 conda-forge
libssh2 1.11.1 hf672d98_0 conda-forge
libstdcxx 14.2.0 h8f9b012_2 conda-forge
libstdcxx-ng 14.2.0 h4852527_2 conda-forge
libuuid 2.38.1 h0b41bf4_0 conda-forge
libxcrypt 4.4.36 hd590300_1 conda-forge
libxml2 2.13.6 h8d12d68_0 conda-forge
libzlib 1.3.1 hb9d3cd8_2 conda-forge
lz4-c 1.10.0 h5888daf_1 conda-forge
lzo 2.10 hd590300_1001 conda-forge
mamba 1.5.12 py312h9460a1c_0 conda-forge
menuinst 2.2.0 py312h7900ff3_0 conda-forge
ncurses 6.5 h2d0b736_3 conda-forge
openssl 3.5.0 h7b32b05_1 conda-forge
packaging 24.2 pyhd8ed1ab_2 conda-forge
pip 25.0.1 pyh8b19718_0 conda-forge
platformdirs 4.3.6 pyhd8ed1ab_1 conda-forge
pluggy 1.5.0 pyhd8ed1ab_1 conda-forge
pybind11-abi 4 hd8ed1ab_3 conda-forge
pycosat 0.6.6 py312h66e93f0_2 conda-forge
pycparser 2.22 pyh29332c3_1 conda-forge
pysocks 1.7.1 pyha55dd90_7 conda-forge
python 3.12.9 h9e4cc4f_1_cpython conda-forge
python_abi 3.12 5_cp312 conda-forge
readline 8.2 h8c095d6_2 conda-forge
reproc 14.2.5.post0 hb9d3cd8_0 conda-forge
reproc-cpp 14.2.5.post0 h5888daf_0 conda-forge
requests 2.32.3 pyhd8ed1ab_1 conda-forge
ruamel.yaml 0.18.10 py312h66e93f0_0 conda-forge
ruamel.yaml.clib 0.2.8 py312h66e93f0_1 conda-forge
setuptools 75.8.2 pyhff2d567_0 conda-forge
tk 8.6.13 noxft_h4845f30_101 conda-forge
tqdm 4.67.1 pyhd8ed1ab_1 conda-forge
truststore 0.10.1 pyh29332c3_0 conda-forge
tzdata 2025a h78e105d_0 conda-forge
urllib3 2.3.0 pyhd8ed1ab_0 conda-forge
wheel 0.45.1 pyhd8ed1ab_1 conda-forge
yaml-cpp 0.8.0 h59595ed_0 conda-forge
zstandard 0.23.0 py312h4c3975b_3 conda-forge
zstd 1.5.7 hb8e6e7a_2 conda-forge
Configuration
# jupyterhub_config.py
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
# Configuration file for JupyterHub
import os
c = get_config() # noqa: F821
# We rely on environment variables to configure JupyterHub so that we
# avoid having to rebuild the JupyterHub container every time we change a
# configuration parameter.
# Spawn single-user servers as Docker containers
c.JupyterHub.spawner_class = "dockerspawner.DockerSpawner"
# Spawn containers from this image
c.DockerSpawner.image = os.environ["DOCKER_NOTEBOOK_IMAGE"]
# Connect containers to this Docker network
network_name = os.environ["DOCKER_NETWORK_NAME"]
c.DockerSpawner.use_internal_ip = True
c.DockerSpawner.network_name = network_name
# Explicitly set notebook directory because we'll be mounting a volume to it.
# Most `jupyter/docker-stacks` *-notebook images run the Notebook server as
# user `jovyan`, and set the notebook directory to `/home/jovyan/work`.
# We follow the same convention.
notebook_dir = os.environ.get("DOCKER_NOTEBOOK_DIR", "/home/jovyan/work")
c.DockerSpawner.notebook_dir = notebook_dir
# Mount the real user's Docker volume on the host to the notebook user's
# notebook directory in the container
c.DockerSpawner.volumes = {"jupyterhub-user-{username}": notebook_dir}
# Remove containers once they are stopped
c.DockerSpawner.remove = True
# For debugging arguments passed to spawned containers
c.DockerSpawner.debug = True
# User containers will access hub by container name on the Docker network
c.JupyterHub.hub_ip = "jupyterhub"
c.JupyterHub.hub_port = 8080
# Persist hub data on volume mounted inside container
c.JupyterHub.cookie_secret_file = "/data/jupyterhub_cookie_secret"
c.JupyterHub.db_url = "sqlite:////data/jupyterhub.sqlite"
# Allow all signed-up users to login
c.Authenticator.allow_all = True
# Authenticate users with Native Authenticator
c.JupyterHub.authenticator_class = 'dummy'
# runtime args passed to singleuser-server
c.DockerSpawner.args = [ "--ServerApp.log_level=DEBUG"]
# Allow anyone to sign-up without approval
# c.NativeAuthenticator.open_signup = True
# Allowed admins
admin = os.environ.get("JUPYTERHUB_ADMIN")
if admin:
c.Authenticator.admin_users = [admin]Logs
# paste relevant logs here, if any
[D 2025-11-24 23:33:53.394 ServerApp] Checking user admin with scopes ['access:servers!server=admin/', 'read:users:groups!user=admin', 'read:users:name!user=admin'] against {'access:servers!user=admin', 'access:servers!server=admin/'}
[D 2025-11-24 23:33:53.394 ServerApp] Allowing user admin with scopes {'access:servers!server=admin/'}
[I 2025-11-24 23:33:53.398 ServerApp] 200 GET /user/admin/lab/api/settings?ids_only=true&1764027233389 (admin@::ffff:10.112.12.24) 5.91ms
[D 2025-11-24 23:33:53.726 ServerApp] No user identified
[I 2025-11-24 23:33:53.726 ServerApp] 200 GET /user/admin/api (@172.18.0.3) 0.63ms
[D 2025-11-24 23:33:54.389 ServerApp] Checking user admin with scopes ['access:servers!server=admin/', 'read:users:groups!user=admin', 'read:users:name!user=admin'] against {'access:servers!user=admin', 'access:servers!server=admin/'}
[D 2025-11-24 23:33:54.389 ServerApp] Allowing user admin with scopes {'access:servers!server=admin/'}
[I 2025-11-24 23:33:54.390 ServerApp] 204 PUT /user/admin/lab/api/workspaces/auto-e?1764027234386 (admin@::ffff:10.112.12.24) 1.48ms
[D 2025-11-24 23:33:54.399 ServerApp] Checking user admin with scopes ['access:servers!server=admin/', 'read:users:groups!user=admin', 'read:users:name!user=admin'] against {'access:servers!user=admin', 'access:servers!server=admin/'}
[D 2025-11-24 23:33:54.399 ServerApp] Allowing user admin with scopes {'access:servers!server=admin/'}
[I 2025-11-24 23:33:54.401 ServerApp] 200 GET /user/admin/api/contents?content=1&hash=0&1764027234395 (admin@::ffff:10.112.12.24) 2.38ms
[D 2025-11-24 23:33:54.923 ServerApp] Checking user admin with scopes ['access:servers!server=admin/', 'read:users:groups!user=admin', 'read:users:name!user=admin'] against {'access:servers!user=admin', 'access:servers!server=admin/'}
[D 2025-11-24 23:33:54.923 ServerApp] Allowing user admin with scopes {'access:servers!server=admin/'}
[I 2025-11-24 23:33:54.924 ServerApp] 204 PUT /user/admin/lab/api/workspaces/auto-e?1764027234919 (admin@::ffff:10.112.12.24) 1.24ms
[D 2025-11-24 23:33:56.965 ServerApp] No user identified
Thanks for everything that you all do to keep the project alive and healthy, we appreciate it 🙏