【问题标题】:How to run R Shiny App in Docker Container如何在 Docker 容器中运行 R Shiny App
【发布时间】:2019-12-16 16:40:51
【问题描述】:

我为 R Shiny App 构建了一个 Docker 映像,并在 Windows 10 Home 上使用 Docker Toolbox 运行了相应的容器。尝试使用我的网络浏览器打开应用程序时,仅显示索引。我不知道为什么应用程序没有执行。

日志告诉我:

*** warning - no files are being watched ***
[2019-08-12T15:34:42.688] [INFO] shiny-server - Shiny Server v1.5.12.1 (Node.js v10.15.3)
[2019-08-12T15:34:42.704] [INFO] shiny-server - Using config file "/etc/shiny-server/shiny-server.conf"
[2019-08-12T15:34:43.100] [INFO] shiny-server - Starting listener on http://[::]:3838

我已经通过执行以下引用 docker hub 映像的命令指定了应用程序主机到容器的路径:

docker run --rm -p 3838:3838 -v /C/Docker/App/:/srv/shinyserver/ -v /C/Docker/shinylog:/var/log/shiny-server/  didsh123/ps_app:heatmap

我的 Docker 文件如下所示:

# get shiny serves plus tidyverse packages image
FROM rocker/shiny-verse:latest

# system libraries of general use
RUN apt-get update && apt-get install -y \
    sudo \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev \
    libssh2-1-dev

##Install R packages that are required--> were already succesfull
RUN R -e "install.packages(c('shinydashboard','shiny', 'plotly', 'dplyr', 'magrittr'))"

#Heatmap related packages
RUN R -e "install.packages('gpclib', type='source')"
RUN R -e "install.packages('rgeos', type='source')"
RUN R -e "install.packages('rgdal', type='source')"

# copy app to image
COPY ./App /srv/shiny-server/App

# add .conf file to image/container to preserve log file
COPY ./shiny-server.conf  /etc/shiny-server/shiny-server.conf


##When run image and create a container, this container will listen on port 3838
EXPOSE 3838

###Avoiding running as root --> run container as user instead
# allow permission
RUN sudo chown -R shiny:shiny /srv/shiny-server
# execute in the following as user --> imortant to give permission before that step
USER shiny

##run app
CMD ["/usr/bin/shiny-server.sh"]

因此,当我在浏览器中处理 docker ip 和评估端口时,应用程序应该在那里运行,但只显示索引。我使用以下行:

http://192.168.99.100:3838/App/

我很高兴收到每一个提示或建议。我是 Docker 新手,所以我也很高兴得到详细的解释。

【问题讨论】:

    标签: r docker shiny dockerfile golem


    【解决方案1】:

    要在 docker 中使用 shiny,我建议您使用 golem 包。 golem 提供了一个构建闪亮应用程序的框架。如果您有一个根据他们的框架开发的应用程序,可以使用函数golem::add_dockerfile() 自动创建dockerfiles。

    如果您对框架不感兴趣,您仍然可以查看the source for add_dockerfile() 以了解他们如何管理部署。他们的策略是使用带有端口参数的shiny::runApp()。因此,在这种情况下,shiny-server 不是必需的。

    golem中的Dockerfile大概是这样的

    FROM rocker/tidyverse:3.6.1
    RUN R -e 'install.packages("shiny")'
    COPY app.R /app.R
    EXPOSE 3838
    CMD R -e 'shiny::runApp("app.R", port = 3838, host = "0.0.0.0")'
    

    这将使应用程序在端口 3838 上可用。当然,您必须安装任何其他 R 包和系统依赖项。

    其他提示

    • 为了提高重现性,我建议您使用remotes::install_version() 而不是install.packages()
    • 如果您要部署多个具有类似依赖关系的应用程序(例如shinydashboard),编写您自己的基础镜像来代替rocker/tidyverse:3.6.1 是有意义的。这样,您的构建会更快。

    【讨论】:

      【解决方案2】:

      查看日志是否有任何有用的信息?并执行到容器中,验证App内容是否复制到正确的位置。

      因为 /App 内容的复制方式看起来不正确

      /App 的内容在构建阶段被复制到映像中到 /srv/shiny-server/App,并且您在运行容器时尝试使用 -v 选项覆盖 /srv/shiny-server 内容。

      看起来在运行时复制的应用数据被覆盖了。

      尝试不使用-v /C/Docker/App/:/srv/shinyserver/ 或使用-v /C/Docker/App/:/srv/shinyserver/App/

      docker run --rm -p 3838:3838 -v /C/Docker/shinylog:/var/log/shiny-server/ didsh123/ps_app:heatmap

      【讨论】:

      • 感谢您对 /App 内容的建议。我解决了这个问题。但是由于我是 Docker 新手,所以我还没有使用日志文件。我将执行 log 命令时收到的行附加到上面的问题中。你也可以看看他们吗?此外,我按照您的建议执行了容器,它起作用了。
      • @Heysa12 很高兴知道它有效。根据日志,该应用程序正在使用配置文件 /etc/shiny-server/shiny-server.conf,但是当您复制 COPY ./shiny-server.conf.txt /etc/shiny-server/ - .txt 文件时被复制。这意味着您的应用正在使用默认配置,而不是您复制到图像中的文件。
      • 您还可以将USER appuser 添加到dockerfile 以减轻日志中的安全风险警告。参考:medium.com/@mccode/…
      • 容器不再以 root 身份运行,而是以用户身份运行(请参阅有问题的编辑)。所以这是固定的,但仍然是同样的问题。它可能与配置文件有关吗? docker文件中的正确命令是什么,可以从与之相关的github存储库中复制我自己的配置文件,而不是您提到的默认配置文件?
      • @Heysa12 - 使用这个COPY ./shiny-server.conf /etc/shiny-server/。您正在尝试将 .txt 文件复制到 /etc/shiny-server - 检查本地目录中的文件扩展名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2015-02-18
      相关资源
      最近更新 更多