我正在尝试创建一个Dockerized Flexdashboard应用程序。我可以在本地运行它,但不能在本地主机中运行它。 但是,我可以在同一个docker映像中运行闪亮的应用程序。有趣的是,本地主机中的错误消息显示Flexdashboard应用程序的“未找到”,这与根本不存在页面(“页面未找到”)时不同。
我如何对Flexdashboard应用进行Docker化
dir.create("testshinydocker")
dir.create("testshinydocker/apps")
dir.create("testshinydocker/apps/kmeans")
dir.create("testshinydocker/apps/kmeansflex")
cat(readLines("https://raw.githubusercontent.com/rstudio/shiny-examples/master/050-kmeans-example/server.R"),
file = "testshinydocker/apps/kmeans/server.R", sep = "\n")
cat(readLines("https://raw.githubusercontent.com/rstudio/shiny-examples/master/050-kmeans-example/ui.R"),
file = "testshinydocker/apps/kmeans/ui.R", sep = "\n")
cat(
c('FROM rocker/shiny:latest\n',
"RUN echo 'install.packages(c(\"flexdashboard\"), \\",
"repos='$MRAN', \\",
"dependencies=TRUE)' > /tmp/packages.R \\",
" && Rscript /tmp/packages.R\n",
'EXPOSE 3838\n',
'COPY apps /srv/shiny-server/\n',
'CMD ["/usr/bin/shiny-server.sh"]\n'),
file = "testshinydocker/Dockerfile",
sep = "\n"
)
cat(readLines("https://raw.githubusercontent.com/rstudio/flexdashboard/master/examples/11_shiny-kmeans-clustering/dashboard.Rmd"),
file = "testshinydocker/apps/kmeansflex/kmeans2.Rmd", sep = "\n")
shiny::runApp('testshinydocker/apps/kmeans')
rmarkdown::run("testshinydocker/apps/kmeansflex/kmeans2.Rmd")
cd {path to testshinydocker directory}
docker build -t myapp .
docker run --rm -d -p 3838:3838 myapp
答案 0 :(得分:1)
这可能是由于图像中使用了rmarkdown软件包中的错误(rmoarkdown 1.18版)导致的,并且与此有关:https://github.com/rstudio/rmarkdown/issues/1731和https://github.com/rstudio/rmarkdown/issues/1714。我猜测http://localhost:3838/kmeansflex/kmeans2.Rmd确实有效。
这是您可以如何测试的方法。在apps文件夹中制作一个闪亮的应用程序,以查看正在运行的rmarkdown版本。在应用中创建一个名为“ rmarkdown”的文件夹。然后在其中放置以下简单的 ui.R 和 server.R 脚本,以构建一个闪亮的应用程序(我们知道有光泽的应用程序会为您呈现),以确定您拥有的rmarkdown版本:
fluidPage(
hr(),
fluidRow(column(3, verbatimTextOutput("value")))
)
function(input, output) {
output$value <- renderPrint({ utils::packageVersion('rmarkdown') })
}
然后docker build
并重新docker run
,然后在浏览器中转到http://localhost:3838/rmarkdown/。它应该带您到屏幕上并显示您拥有的rmarkdown的版本。如果是1.18,那就是罪魁祸首。
如果安装的 rmarkdown 版本为1.18,则可能的解决方案是从Dockerfile中的github安装rmarkdown,以便获得一个没有此错误的较新版本,一切都很好。这就是您的Dockerfile中的样子:
FROM rocker/shiny:latest
# apt-get and system utilities
RUN apt-get update && apt-get install -y \
libssl-dev \
libsodium-dev
RUN echo 'install.packages(c("flexdashboard", "remotes", "openssl"), \
repos='$MRAN', \
dependencies=TRUE)' > /tmp/packages.R \
&& Rscript /tmp/packages.R
RUN Rscript -e 'remotes::install_github("rstudio/rmarkdown")'
COPY apps /srv/shiny-server/
EXPOSE 3838
CMD ["/usr/bin/shiny-server.sh"]