我有一个相当复杂的闪亮应用程序,可以在本地成功运行。 以前它也成功停靠,并通过shinyproxy在VirtualBox VM(Debian x64)中运行正常。
随着最后一个docker图像的重新构建,应用程序无法正常运行,容器运行,日志文件显示应用程序启动, 然而,没有用户界面,只是' undefined'在浏览器中。在浏览器中重新加载后,将显示应用程序UI。
为了便于排查我已经用小型demo-app替换了我复杂的应用程序,使Dockerfile保持不变, 在我复杂的应用程序库中使用了很多。
demo-app由server.R,ui.R和global.R
组成我有同样奇怪的结果:' undefined'而不是用户界面,应用程序会在重新加载后显示。
如果我将所有库移动到server.R并删除global.R,那么问题就解决了,应用程序UI会立即出现。
这是我的Dockerfile:
# Ubuntu 16.04 LTS with R
FROM openanalytics/r-base
# system libraries of general use
RUN apt-get update && apt-get install -y \
sudo \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev \
libxt-dev \
libssl-dev \
libssh2-1-dev \
libssl1.0.0 \
libxml2-dev \
libpq-dev \
libgdal-dev \
libproj-dev
RUN R -e "install.packages(c('remotes', 'RPostgreSQL', 'stringi', 'shiny',
'shinydashboard', 'shinyjs', 'leaflet', 'plyr', 'dplyr', 'data.table',
'scales', 'rgdal', 'sp', 'shinyBS', 'devtools','DT','rgeos','shinyjqui'),
repos='https://cloud.r-project.org/')"
RUN installGithub.r hadley/ggplot2
RUN R -e "install.packages(c('tidyr', 'hexbin', 'purrr'),
repos='https://cloud.r-project.org/')"
RUN installGithub.r ropensci/plotly
RUN rm -rf /tmp/downloaded_packages/
RUN apt-get update && apt-get install -y \
default-jre \
default-jdk \
libv8-3.14-dev
RUN R -e "install.packages(c('rhandsontable', 'V8'), repos='https://cloud.r-
project.org/')"
RUN apt-get update && apt-get install -y \
r-cran-rjava
RUN R -e "install.packages(c('rJava', 'xlsxjars'), repos='https://cloud.r-
project.org/')"
RUN R -e "install.packages(c('xlsx'), repos='https://cloud.r-project.org/')"
RUN installGithub.r jrowen/rhandsontable
RUN installGithub.r dreamRs/shinyWidgets
RUN rm -rf /tmp/downloaded_packages/
RUN mkdir /root/test_app2
COPY test_app2 /root/test_app2
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
CMD ["R", "-e shiny::runApp('/root/test_app2')"]
server.R
server <- function(input, output) {
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"pressure" = pressure,
"cars" = cars)
})
output$summary <- renderPrint({
dataset <- datasetInput()
summary(dataset)
})
output$view <- renderTable({
head(datasetInput(), n = input$obs)
})
}
ui.R
ui <- fluidPage(
titlePanel("Shiny Text"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "dataset",
label = "Choose a dataset:",
choices = c("rock", "pressure", "cars")),
numericInput(inputId = "obs",
label = "Number of observations to view:",
value = 10)
),
mainPanel(
verbatimTextOutput("summary"),
tableOutput("view")
)
)
)
global.R
library(RPostgreSQL)
library(stringi)
library(shiny)
library(shinydashboard)
library(shinyjs)
library(leaflet)
library(plyr)
library(dplyr)
library(data.table)
library(ggplot2)
library(plotly)
library(scales)
library(rgdal)
library(sp)
library(shinyBS)
library(rhandsontable)
library(xlsx)
library(shinyWidgets)
library(reshape2)
library(tools)
library(DT)
有人可以帮忙吗?
更新:最小化Dockerfile并遇到同样的问题:
FROM openanalytics/r-base
RUN apt-get update && apt-get install -y \
sudo \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev \
libxt-dev \
libssl-dev \
libssh2-1-dev \
libssl1.0.0 \
libxml2-dev \
libpq-dev \
libgdal-dev \
libproj-dev
RUN R -e "install.packages(c( 'shiny','dplyr'), repos='https://cloud.r-project.org/')"
RUN rm -rf /tmp/downloaded_packages/
RUN apt-get update && apt-get install -y \
default-jre \
default-jdk \
libv8-3.14-dev
RUN apt-get update && apt-get install -y \
r-cran-rjava
RUN R -e "install.packages(c('rJava', 'xlsxjars'), repos='https://cloud.r-project.org/')"
RUN R -e "install.packages(c('xlsx'), repos='https://cloud.r-project.org/')"
RUN rm -rf /tmp/downloaded_packages/
RUN mkdir /root/test_app2
COPY test_app2 /root/test_app2
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
CMD ["R", "-e shiny::runApp('/root/test_app2')"]
只有三个库 - shiny, xlsx, dplyr
- 会产生相同的'undefined'
结果。但是只有在构建之后运行的第一个容器上运行才能运行(登录/注销,重启docker服务和shinyproxy服务)。组合shiny & xlsx
或shiny & dplyr
不会产生'undefined'
答案 0 :(得分:0)
非常感谢@Ralf Stubner提出的将问题缩小到最小化的想法。
在我的帖子更新中,有一个最小的Dockerfile可以重现问题。但是,这个问题仅存在于VirtualBox VM中,一切运行正常(使用简化的示例应用程序和我的复杂应用程序)在AWS上。因此,在VirtualBox VM中构建Shiny App的Docker镜像存在一个问题 - 现在问题相当不同。