Dockerized приложение flexdashboard не будет работать на локальном хосте - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать приложение Dockerized Flexdashboard. Я могу запустить его локально, но не на локальном хосте. Тем не менее, я могу запускать блестящие приложения в одном и том же docker изображении. Интересно, что сообщение об ошибке на локальном хосте говорит «Не найдено» для приложения Flexdashboard, которое отличается от того, когда страница вообще не существует («Страница не найдена»).

Как я могу Dockerize приложение Flexdashboard?

MWE

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")

Docker код (работает в Powershell)

cd {path to testshinydocker directory}
docker build -t myapp .
docker run --rm -d -p 3838:3838 myapp

локальные URL-адреса

Блестящее приложение работает enter image description here

Приложение Flexdashbord «Не найдено» enter image description here

Страница несуществующих динозавров «Страница не найдена» enter image description here

1 Ответ

0 голосов
/ 18 марта 2020

Это, вероятно, результат ошибки в пакете rmarkdown, используемой в вашем изображении (rmoarkdown v. 1.18) и связанной с этим: https://github.com/rstudio/rmarkdown/issues/1731 и https://github.com/rstudio/rmarkdown/issues/1714. Я предполагаю http://localhost: 3838 / kmeansflex / kmeans2.Rmd действительно работает.

Вот как вы можете это проверить. Создайте блестящее приложение в папке apps, чтобы увидеть, какая версия rmarkdown запущена. Создайте папку в apps под названием «rmarkdown». Затем поместите следующие простые ui.R и server.R сценарии туда, чтобы создать блестящее приложение (мы знаем, что блестящие приложения визуализируют для вас), чтобы определить, какая у вас версия rmarkdown:

Сценарий ui.R

fluidPage( 
  hr(),
  fluidRow(column(3, verbatimTextOutput("value")))   
)

Сценарий server.r

function(input, output) {
​  output$value <- renderPrint({ utils::packageVersion('rmarkdown') })
}

Затем docker build и повторно docker run и go до http://localhost: 3838 / rmarkdown / в браузере. Он должен вывести вас на экран и отобразить версию rmarkdown, которая у вас есть. Если это 1,18, то виновник.

enter image description here

Потенциальное решение

Если установлена ​​ rmarkdown , версия 1.18 Одним из возможных решений было бы установить rmarkdown из github в ваш Dockerfile, чтобы вы получили более новую версию без этой ошибки, и все в порядке. Вот как это будет выглядеть в вашем 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"]
...