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

Docker化含ggvis包的R Shiny应用时textOutput不显示问题排查

Docker化含ggvis的Shiny应用后textOutput组件消失问题排查

问题现象

  • 本地运行Shiny应用时,textOutput("size")正常显示iris数据集行数(150),ggvis散点图也能正常渲染
  • 将应用Docker化部署后,浏览器打开容器中的应用,textOutput("size")内容消失,但ggvis图表仍能正常显示

相关代码

Shiny应用原代码

library(shiny)
library(ggvis)

df <- iris

ui <- fluidPage(
  textOutput("size"),
  br(),
  ggvisOutput("cloudPoint"),
)

server <- function(input, output, session) {
  
  output$size <- renderText({
    nrow(df)
  })
  
  output$cloudPoint <- reactive({
      df %>%
      ggvis::ggvis(~Sepal.Length,~Sepal.Width)%>%
      bind_shiny("cloudPoint")
  })
  
}

shinyApp(ui, server)

Dockerfile

FROM rocker/shiny-verse

RUN R -e "install.packages(c('ggvis'))"

COPY /shinyapp/ /srv/shiny-server/

问题原因

server端对ggvis输出的处理方式错误:

  • ggvis的bind_shiny函数本身负责将可视化绑定到指定的输出容器(即ggvisOutput("cloudPoint")),不需要将其包裹在reactive()中并赋值给output$cloudPoint
  • 错误的赋值方式干扰了Shiny的输出渲染上下文,Docker环境下Shiny的输出调度逻辑更严格,因此导致textOutput("size")无法正常渲染;本地环境可能因缓存或环境差异暂时掩盖了该问题

解决方案

修改server代码,移除错误的output$cloudPoint赋值,直接执行ggvis的绑定逻辑:

library(shiny)
library(ggvis)

df <- iris

ui <- fluidPage(
  textOutput("size"),
  br(),
  ggvisOutput("cloudPoint"),
)

server <- function(input, output, session) {
  
  output$size <- renderText({
    nrow(df)
  })
  
  # 直接执行ggvis绑定,无需赋值给output对象
  df %>%
    ggvis::ggvis(~Sepal.Length, ~Sepal.Width) %>%
    bind_shiny("cloudPoint")
  
}

shinyApp(ui, server)

修改后重新构建Docker镜像并运行,textOutput("size")和ggvis图表都能正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:57:34