【问题标题】:Shiny app docker container not loading in browser闪亮的应用程序 docker 容器未在浏览器中加载
【发布时间】:2019-03-23 12:09:28
【问题描述】:

我将一个闪亮的应用程序容器化并尝试使用 Kubernetes 将其部署在 GCP 上,但每次我获取外部 IP 地址并将其加载到浏览器中时,都会收到“无法访问此站点连接被拒绝”错误。因此,我尝试在本地主机上运行容器进行故障排除,现在我收到“127.0.0.1 未发送任何数据。ERR_EMPTY_RESPONSE”错误。我不知疲倦地在网上搜索解决方案,但似乎没有什么对我有用。另外,没有一个解决方案适用于闪亮的应用程序 docker 容器。许多修复都提到了端口,但我仍然卡住了。顺便说一句,我在我的 Mac 上安装了 xampp。 xampp 和我的 docker 容器是否有可能尝试共享同一个端口,或者我的 Docker 文件代码有问题?请原谅我,但我是容器新手,到目前为止只遵循文档程序。下面是我的 Docker 文件代码:

Dockerfile

# Install R version 3.5.1
FROM r-base:3.5.1

# 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
# TODO: add further package if you need!
RUN R -e 

"install.packages(c('shiny','shinyjs','tools','foreign','XLConnect'), 
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/

# 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"]

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 那里有is 一个工作的 Docker 镜像,为什么要创建自己的?

标签: docker shiny dockerfile google-kubernetes-engine


【解决方案1】:

你不需要闪亮的服务器。

添加

app <- shinyApp(ui = ui, server = server)
runApp(app, host ="0.0.0.0", port = 80, launch.browser = FALSE)

到你的 R 脚本和

EXPOSE 80
CMD ["R", "-e", "library(shiny); source('/root/pathToYourScript/script.R')"]

到您的 Dockerfile。

【讨论】:

  • 我包括了你提到的上述内容;删除了运行闪亮服务器和配置文件的所有命令,但我仍然无法通过浏览器从我的容器访问闪亮的应用程序。我仍然收到“无法访问此站点连接被拒绝”错误。我在闪亮的应用程序中将端口更改为 3838,并在我的 docker 文件中暴露在 3838,但仍然无法正常工作(我认为使用端口 80 的 xampp 会干扰容器)。
  • 这里有一个详细的指南:shinyproxy.io/deploying-apps 只需根据您的需要进行修改(并忽略闪亮代理的详细信息)。
  • 我解决了这个问题——shinyapp 有一些过时和缺失的库。它可以在我的本地计算机和谷歌云上运行。谢谢!
【解决方案2】:

我必须首先创建一个 Rprofile.site 文件并将其放在与 dockerfile 和 shinyapp 相同的目录中。然后,我创建了自己的基础映像,其中包含应用程序所需的所有库,并从我的 dockerfile 中调用它。这是最终代码:

Rprofile.site

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

Dockerfile

FROM bimage_rpackages

# Copy the app to the image
RUN mkdir /root/shinyapp
COPY app/shinyapp /root/shinyapp

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

# Make the ShinyApp available at port 3838
EXPOSE 3838

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

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 2017-03-03
    • 2013-07-04
    • 2018-09-13
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2016-11-03
    • 2019-05-28
    相关资源
    最近更新 更多