Предоставьте доступ к докризованным блестящим приложениям локальным томам - PullRequest
0 голосов
/ 04 марта 2020

У меня блестящее приложение, которое я упаковал с 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

Итак, мой вопрос: как я могу получить доступ к моей локальной файловой системе / томам через Блестящее приложение с блестящими файлами? Я уверен, что есть простое решение, но я новичок во всем этом.

1 Ответ

1 голос
/ 04 марта 2020

Использование docker функция громкости. Например: в командной строке -v используется для сопоставления каталогов контейнеров с каталогами хостов

docker -v full_path_on_host: full_path_inside_container

Аналогично, существует ключевое слово VOLUME для то же самое при работе с файлом docker.

...