You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化R(Shiny)应用启动报错:找不到shiny包,请求排查问题

问题

尝试将R(Shiny)应用Docker化时遇到报错,Dockerfile内容如下:

FROM rocker/shiny:latest

RUN apt-get update -qq && apt-get -y --no-install-recommends install \
    libxml2-dev \
    libcairo2-dev \
    libsqlite3-dev \
    libmariadbd-dev \
    libpq-dev \
    libssh2-1-dev \
    unixodbc-dev \
    libcurl4-openssl-dev \
    libssl-dev  && rm -rf /var/lib/apt/lists/*

## update system libraries
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get clean

# python dependencies
RUN apt-get install -y python3-pip
RUN pip3 install tensorflow==2.10.0

## working directory
WORKDIR /app

# install renv and restore packages
RUN Rscript -e 'install.packages("renv")'
COPY renv.lock .
RUN Rscript -e 'renv::restore()'

# copy the app to the image
COPY . .

# expose port
EXPOSE 3838

# run app on container start
CMD ["Rscript", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 3838)"]

执行启动命令时出现以下错误:

# Bootstrapping renv 1.0.2 ---------------------------------------------------
- Downloading renv ... 
OK
- Installing renv  ... 
OK


- One or more packages recorded in the lockfile are not installed.
- Use `renv::status()` for more details.
Error in loadNamespace(x) : there is no package called ‘shiny’
Calls: loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Execution halted

不清楚哪里操作出错,求排查。


解决思路

问题根源

rocker/shiny基础镜像本身预装了shiny,但renv创建的隔离环境默认不会包含系统级安装的包。启动时renv接管了包加载路径,导致找不到基础镜像里的shiny;同时你的renv.lock文件未记录shiny依赖,所以renv::restore()也不会自动安装它。

修复方案

  1. 将shiny加入renv依赖锁文件
    在本地开发环境中运行renv::snapshot(),把shiny添加到项目的renv.lock中,这样容器执行renv::restore()时会自动安装shiny到隔离环境。

  2. 优化Dockerfile执行逻辑

    • 合并重复的apt-get update命令,减少镜像层数、提升构建速度:
      RUN apt-get update -qq && apt-get -y --no-install-recommends install \
          libxml2-dev \
          libcairo2-dev \
          libsqlite3-dev \
          libmariadbd-dev \
          libpq-dev \
          libssh2-1-dev \
          unixodbc-dev \
          libcurl4-openssl-dev \
          libssl-dev \
          python3-pip && \
          apt-get upgrade -y && \
          apt-get clean && \
          rm -rf /var/lib/apt/lists/*
      
    • 改用R命令启动应用,确保renv环境被正确加载:
      CMD ["R", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 3838)"]
      
  3. 让renv复用系统预装的shiny(可选)
    如果不想在renv环境中重复安装shiny,可在项目根目录创建.Rprofile文件,添加:

    options(renv.config.snapshot.installed = TRUE)
    

    或者在本地运行renv::settings$ignored.packages(NULL),取消renv对系统级包的忽略,再执行renv::snapshot()更新锁文件。


内容的提问来源于stack exchange,提问作者se7en

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:40:41