如何在容器环境的JupyterLab内运行Shiny应用?
容器内Jupyter notebook运行Shiny应用解决方案
结论
可以正常运行,你遇到的连接失败问题并非端口未开放导致,而是Shiny默认的本地监听配置、访问路径不符合JupyterLab的代理规则导致的。
修复方案
方案一:手动调整访问路径(无需额外安装插件)
- 运行Shiny时指定监听地址、固定端口,关闭自动弹出浏览器的配置,示例代码如下:
library(shiny) # 固定Shiny运行端口,可自定义为未被占用的端口 options(shiny.port = 7890) # 允许所有地址访问,默认仅监听127.0.0.1会导致外部无法访问 options(shiny.host = "0.0.0.0") runExample("01_hello", launch.browser = FALSE)
- 运行后不要直接访问控制台输出的
http://localhost:7890,而是将访问路径改为http://<你的Jupyter访问地址>/proxy/7890/,注意路径末尾的斜杠不能省略。
方案二:安装适配插件(自动匹配路径)
- 在容器内安装
jupyter-shiny-proxy插件,运行命令:
pip install jupyter-shiny-proxy
- 安装完成后重启JupyterLab,后续运行Shiny应用时会自动适配Jupyter的代理规则,无需手动修改访问地址,适配性更高。
额外注意事项
如果你不想走Jupyter代理直接访问Shiny应用,除了在docker run时通过-p <本地端口>:<Shiny端口>映射端口外,必须确保Shiny的host配置为0.0.0.0,否则仅容器内部可以访问该服务。
内容的提问来源于stack exchange,提问作者Hong Ooi
相关产品推荐
相关产品推荐

