Блестящее приложение не отображается после создания образа Docker и указания порта - PullRequest
1 голос
/ 14 мая 2019

В настоящее время я пытаюсь создать большой образ Docker и запустить из него блестящее приложение, чтобы я мог в конечном итоге развернуть его на сервере Unix. Образ строится успешно; однако когда я запускаю образ, приложение запускается и полностью игнорирует указанный порт.

Что еще более странно, я впервые создал небольшое тестовое приложение, и инструкции из этого поста SO * ( Контейнер для блестящих приложений не загружается в браузер ) сработали. Я скопировал тот же стиль, который использовал в тестовом приложении, в другое приложение Shiny, и теперь оно не работает.

Структура моего образа Docker аналогична структуре, используемой ShinyProxy на их странице Github: https://github.com/openanalytics/shinyproxy-template:

|-- Dockerfile
|-- Rprofile.site
|-- app_stuff
    |-- app.R
    |-- accessory files called from app.R...

Мой Dockerfile находится ниже:

# Install R version 3.5.1
FROM r-base:3.5.1

# system libraries of general use - I don't know if these are right ????
RUN apt-get update && apt-get install -y \
    default-jdk \
    libbz2-dev \
    zlib1g-dev \
    gfortran \
    liblzma-dev \
    libpcre3-dev \
    libreadline-dev \
    xorg-dev \
    sudo \  
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev \
    libssh2-1-dev \
    libxml2-dev

RUN R -e "install.packages('remotes');"
RUN R -e "library(remotes); \
remotes::install_version('shiny', version='1.1.0', repos='https://cran.r-project.org/'); \
remotes::install_version('tidyverse', version='1.2.1', repos='https://cran.r-project.org/'); \
remotes::install_version('ggiraph', version='0.6.0', repos='https://cran.r-project.org/'); \
remotes::install_version('plotly', version='4.8.0', repos='https://cran.r-project.org/'); \
remotes::install_version('CausalImpact', version='1.2.3', repos='https://cran.r-project.org/'); \
remotes::install_version('reshape2', version='1.4.3', repos='https://cran.r-project.org/'); \
remotes::install_version('bsts', version='0.8.0', repos='https://cran.r-project.org/'); \
remotes::install_version('xts', version='0.10-2', repos='https://cran.r-project.org/'); \
remotes::install_version('BoomSpikeSlab', version='1.0.0', repos='https://cran.r-project.org/'); \
remotes::install_version('Boom', version='0.8', repos='https://cran.r-project.org/'); \
remotes::install_version('MASS', version='7.3-50', repos='https://cran.r-project.org/'); \
remotes::install_version('dygraphs', version='1.1.1.4', repos='https://cran.r-project.org/'); \
remotes::install_version('prophet', version='0.4', repos='https://cran.r-project.org/'); \
remotes::install_version('rlang', version='0.3.3', repos='https://cran.r-project.org/'); \
remotes::install_version('Rcpp', version='1.0.1', repos='https://cran.r-project.org/'); \
remotes::install_version('zoo', version='1.8-1', repos='https://cran.r-project.org/'); \
remotes::install_version('RJDBC', version='0.2-7.1', repos='https://cran.r-project.org/'); \
remotes::install_version('rJava', version='0.9-10', repos='https://cran.r-project.org/'); \
remotes::install_version('shinyjs', version='1.0', repos='https://cran.r-project.org/'); \
remotes::install_version('DT', version='0.5', repos='https://cran.r-project.org/'); \
remotes::install_version('shinyBS', version='0.61', repos='https://cran.r-project.org/');"

# copy the app to the image
RUN mkdir /root/app_stuff
COPY app_stuff /root/app_stuff

COPY Rprofile.site /usr/lib/R/etc/

EXPOSE 3838

CMD ["R", "-e", "shiny::runApp('/root/app_stuff')"]

Мой Rprofile.site :

local({
   options(shiny.port = 3838, shiny.host = "0.0.0.0")
})

После построения файла с помощью команды

docker build -t price_opt .

и затем запустить образ

docker run -it -p 3838:3838 price_opt

Я ожидал увидеть распечатанное блестящее приложение: Listening on http://0.0.0.0:3838, но вместо этого оно напечатало:

Listening on http://127.0.0.1:6688

Который я не могу найти на своей локальной машине.

Опять же, самая странная вещь - этот тип настройки работает для меньшего блестящего приложения. Когда я запустил эту команду docker run сверху для меньшего приложения, приложение было доступно под localhost: 3838.

Есть мысли о том, почему это происходит? Последнее, что я думаю, похоже, что у этого пользователя на сайте Shiny Proxy была похожая проблема (https://support.openanalytics.eu/t/shiny-app-listening-on-wrong-host/957). Его проблема - это своего рода опечатка, но, похоже, она действует точно так же, когда приложение Shiny полностью игнорирование предоставленного номера порта в Rprofile.site и в команде docker run.

РЕДАКТИРОВАТЬ - Решение

Благодаря пользователю @Wil, изменив последнюю строку файла Docker на CMD ["R", "-e", "shiny::runApp('/root/app_stuff', host='0.0.0.0', port=3838)"], приложение смогло нормально запускаться на localhost: 3838.

1 Ответ

1 голос
/ 15 мая 2019

Порт 3838 является портом по умолчанию для Shiny Server, но runApp() выбирает доступный порт.Похоже, R не отвечает на ваш Rprofile.site, поэтому я бы просто указал порт в вашем вызове на runApp():

CMD ["R", "-e", "shiny::runApp('/root/app_stuff',options = list(port = '3838'))"]
...