如何在Kubernetes部署的Shiny Server中安装R包?
问题:Kubernetes部署Shiny Server时缺失R包shinyWidgets
部署在Kubernetes上的Shiny Server无法运行面板,报错提示缺少shinyWidgets包,该面板在无Kubernetes的AWS测试环境可正常运行。错误信息如下:
su: ignoring --preserve-environment, it’s mutually exclusive with --login Error in library(“shinyWidgets”) : there is no package called ‘shinyWidgets’ Calls: runApp ... sourceUTF8 -> eval -> eval -> ..stacktraceon.. -> library Execution halted
尝试过多种R包安装方法均失败,当前使用的Dockerfile如下:
FROM rocker/shiny-verse:latest USER root # Finding required libraries. Libraries should be installed in /usr/share/doc # pak::pkg_system_requirements(“dplyr”, “ubuntu”, “20.04") # Packects should be installed in /usr/local/lib/R/site-library # Install system requirements for index.R as needed RUN apt-get update -qq \ && apt-get -y --no-install-recommends install \ gdal-bin \ gsfonts \ imagemagick \ libavfilter-dev \ libcurl4-openssl-dev \ libgdal-dev \ libgeos-dev \ libicu-dev \ libjq-dev \ libmagick++-dev \ libnode-dev \ libpng-dev \ libproj-dev \ libprotobuf-dev \ libsqlite3-dev \ libssl-dev \ libudunits2-dev \ make \ protobuf-compiler \ zlib1g-dev \ lbzip2 \ libgeos-c1v5 \ libxml2-dev \ sudo \ pandoc \ pandoc-citeproc \ libcairo2-dev \ libxt-dev \ libssh2-1-dev \ littler \ proj-bin # Install Tree RUN apt-get install -y tree RUN install2.r --error --deps TRUE \ data.table \ dplyr \ geobr \ rgeos \ geojsonio \ ggplot2 \ ggrepel \ ggthemes \ grid \ magick \ magrittr \ pak \ plotly \ png \ readr \ rmapshaper \ shinyBS \ shinycssloaders \ shinyWidgets \ sp \ && rm -rf /tmp/downloaded_packages # I also tried to install using these packages with either no success. # install R packages required # RUN R -e “install.packages(‘shinyWidgets’, repos=‘http://cran.rstudio.com/’)” # RUN R -q -e ‘pak::local_install(“shinyWidgets”)’ ## assume shiny app is in build folder /shiny COPY ./cenarios/* /srv/shiny-server/ COPY ./log/shiny-server/ /var/log/shiny-server/ # USER shiny # allow permission # RUN sudo chown -R shiny:shiny /srv/shiny-server # run app CMD [“/usr/bin/shiny-server”]
解决方案
1. 修复运行用户权限问题
你当前注释了切换到shiny用户的步骤,但R包是通过root用户安装在/usr/local/lib/R/site-library的。如果Shiny Server默认以shiny用户运行,该用户可能没有读取包目录的权限。取消注释并修改以下内容:
RUN sudo chown -R shiny:shiny /usr/local/lib/R/site-library /srv/shiny-server USER shiny
确保shiny用户既能读取R包,又能访问应用目录。
2. 优化install2.r安装命令
install2.r可能存在依赖解析或缓存问题,修改安装命令以明确指定CRAN镜像并清理缓存:
RUN install2.r --error --deps TRUE --clean --repos https://cloud.r-project.org/ \ data.table \ dplyr \ geobr \ rgeos \ geojsonio \ ggplot2 \ ggrepel \ ggthemes \ grid \ magick \ magrittr \ pak \ plotly \ png \ readr \ rmapshaper \ shinyBS \ shinycssloaders \ shinyWidgets \ sp \ && rm -rf /tmp/downloaded_packages
3. 单独安装并验证shinyWidgets
在Dockerfile中添加单独的安装验证步骤,便于排查安装失败原因:
# 安装shinyWidgets依赖的系统库 RUN apt-get update -qq && apt-get install -y --no-install-recommends libssl-dev libcurl4-openssl-dev # 安装并验证包是否成功 RUN R -e "install.packages('shinyWidgets', repos='https://cloud.r-project.org/', dependencies=TRUE); library(shinyWidgets); cat('shinyWidgets installed successfully\n')"
如果安装失败,镜像构建过程会直接抛出错误,显示具体问题。
4. 排查镜像构建缓存问题
Docker缓存可能跳过包安装步骤,构建时强制刷新缓存:
docker build --no-cache -t shiny-app .
5. 查看完整构建日志
构建镜像时输出完整日志,确认shinyWidgets的安装状态:
docker build --progress=plain -t shiny-app .
内容的提问来源于stack exchange,提问作者jcgn
相关产品推荐
相关产品推荐

