У меня блестящее приложение, которое я упаковал с Docker. В блестящем приложении я использую библиотеку shinyFiles
, чтобы позволить пользователю выбрать и загрузить каталог.
Мой файл server.R выглядит примерно так:
shinyServer(function(input, output, clientData, session) {
volumes <- c("Home (~)" = '~', "Current directory" = getwd(), "Root (/)" = '/')
shinyDirChoose(input, 'resultsLocation', roots=volumes, session=session)
})
, а мой файл ui.R выглядит примерно так:
library(shiny)
library(shinyFiles)
shinyUI(fluidPage(
shinyDirButton('resultsLocation', 'Browse...', title = 'Select a directory')
))
Это нормально, если я Запустите приложение локально через R, однако, если я создаю и запускаю контейнер docker, пользователь не может получить доступ к своим локальным томам, а вместо этого застревает в контейнере docker.
Я следовал это руководство по настройке моего docker контейнера (с добавлением запуска chmod +x shiny-server.sh
, чтобы сделать файл исполняемым) и все, кроме томов, работает. Мой Dockerfile выглядит так:
# Install R version 3.6.0
FROM r-base:3.6.0
# Install Ubuntu packages
RUN apt-get update && apt-get install -y \
sudo \
gdebi-core \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev/unstable \
libxt-dev \
libssl-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" && \
VERSION=$(cat version.txt) && \
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 && \
gdebi -n ss-latest.deb && \
rm -f version.txt ss-latest.deb
# Install R packages that are required
RUN R -e "install.packages('shiny')"
RUN R -e "install.packages('shinyFiles')"
# Copy configuration files into the Docker image
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /app /srv/shiny-server/
# Make the ShinyApp available at port 3838
# EXPOSE 3838
# Copy further configuration files into the Docker image
COPY shiny-server.sh /usr/bin/shiny-server.sh
# Allow permissions
RUN chown -R shiny:shiny /srv/shiny-server
CMD ["/usr/bin/shiny-server.sh"]
И я собираю и запускаю контейнер с:
docker build -t shiny_docker_test . ; docker run -p 3838:3838 shiny_docker_test
Итак, мой вопрос: как я могу получить доступ к моей локальной файловой системе / томам через Блестящее приложение с блестящими файлами? Я уверен, что есть простое решение, но я новичок во всем этом.