#r #docker #shiny #shiny-server
#r #docker #блестящий #блестящий сервер
Вопрос:
Мне нужна помощь в использовании параллельных вычислений и пакета future
с shiny внутри контейнера Docker. Когда я вставляю свое приложение в shinyapps.io он работает нормально, но если я использую Docker, он выдает мне следующую ошибку журнала.
[2019-04-22T19:49:24.320] [INFO] shiny-server - Shiny Server v1.5.7.890 (Node.js v8.10.0) [2019-04-22T19:49:24.325] [INFO] shiny-server - Using config file "/etc/shiny-server/shiny-server.conf"
[2019-04-22T19:49:24.440] [INFO] shiny-server - Starting listener on 0.0.0.0:80
[2019-04-22T19:49:29.399] [INFO] shiny-server - Created bookmark state directory: /var/lib/shiny-server/bookmarks
[2019-04-22T19:49:29.401] [INFO] shiny-server - Created user bookmark state directory: /var/lib/shiny-server/bookmarks/shiny
[2019-04-22T19:50:30.486] [INFO] shiny-server - Error getting worker: Error: The application took too long to respond.
[2019-04-22T19:50:30.488] [INFO] shiny-server - Error getting worker: Error: The application took too long to respond.
[2019-04-22T19:50:30.489] [INFO] shiny-server - Error getting worker: Error: The application took too long to respond.
Мой Dockerfile использует R, блестящий сервер, соединение с Postgres и sqlite. Если я не использую future
, он работает без ошибок.
# Install R version 3.5
FROM r-base:3.5.1
# Install Ubuntu packages
RUN apt-get update amp;amp; apt-get install -y
sudo
gdebi-core
pandoc
pandoc-citeproc
libcurl4-gnutls-dev
libcairo2-dev/unstable
libxt-dev
libssl-dev
libpq-dev
# Download and install ShinyServer (latest version)
RUN wget --no-verbose https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/VERSION -O "version.txt" amp;amp;
VERSION=$(cat version.txt) amp;amp;
wget --no-verbose "https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/shiny-server-$VERSION-amd64.deb" -O ss-latest.deb amp;amp;
gdebi -n ss-latest.deb amp;amp;
rm -f version.txt ss-latest.deb
# Install SQLite
RUN apt-get update amp;amp;
DEBIAN_FRONTEND=noninteractive apt-get -yq install sqlite3 amp;amp;
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install R packages that are required
# TODO: add further package if you need!
RUN R -e "install.packages(c('RSQLite', 'RPostgres', 'readxl', 'dplyr', 'lubridate', 'DT', 'billboarder', 'shiny', 'future'), repos='http://cran.rstudio.com/')"
# Copy configuration files into the Docker image
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /app /srv/shiny-server/
# Give permission of READWRITE for the SQLite database
RUN chmod a rw /srv/shiny-server/db/ /srv/shiny-server/db/*
# Make the ShinyApp available at port 80
EXPOSE 80
# Copy further configuration files into the Docker image
COPY shiny-server.sh /usr/bin/shiny-server.sh
CMD ["/usr/bin/shiny-server.sh"]
Для примера приложения я попробовал загрузить глобальный файл.R shiny
и future
и выполнить что-то вроде
library(shiny)
library(future)
plan(multiprocess)
future({print(1)})
с минимальным ui.R (как FluidPage()
) и server.R (как server <- function(input, output) {}
). Держу пари, что я использую среду Windows 7, и это вызывает путаницу в multiprocess
, если это так, я могу просто отправить приложение в my IT прямо сейчас, чтобы они развернули его на сервере Linux, или в нем отсутствует библиотека Linux или что-то в этом роде, чего я пока не смог выяснить. Заранее благодарю вас.