Hi there, I worked on the PR for bokeh + JupyterHub. Just to make sure I understand the problem, it sounds like you’re using jupyterlab (and not hub) and ssh tunneling the connection (which I guess is port 8888?). Are you running it remotely in a container? The network topology is key to the problem.
The reason behind the PR is that bokeh injects javascript to connect back to the server, and so it puts the URL to connect to in there. When you’re inside a container and/or behind a proxy, the addresses that the bokeh python part knows about might not be what the browser needs to connect to.
I agree completely with what Bryan is suggesting to look at the console logs. If you see connection refused, look closely at the URL you are trying to connect to in the browser. I also like to do wgets and other things to make sure where the server is running just to be sure. If jupyterlab is running in a container, that port might not be exported either. This is why I mention the nbserverproxy extension. This allows for you to use the same tunneled port for the bokeh traffic as well.
Once you figure out what URL you need to connect to, and what bokeh is putting in there, you can write a function for notebook_url to put in the right URL (which is the address the browser connects to).
I hope this helps, although reading this, it does seem very complicated. 