gpt4 book ai didi

r - 仅在触摸Docker容器中的ui.R之后, Shiny 的应用程序才能工作

转载 作者:行者123 更新时间:2023-12-02 18:39:59 26 4
gpt4 key购买 nike

我目睹了我一起入侵的R Shiny演示应用程序(“二手空间”)的奇怪现象。它仅包含一个数据表,其中填充了一些随机数据。这是代码:

ui.R:

library(shiny)

shinyUI(fluidPage(
dataTableOutput("foobar")
)
)

server.R:
library(shiny)
library(DT)

source("data-generator.R")

data <- randomEntries(100) # function from data-generator.R
shinyServer(function(input, output) {
cols <- c("First Name", "Last Name", "ID", "Disk Usage")
output$foobar <- renderDataTable(expr=data, colnames=cols)
})

从RStudio使用 runApp()启动时,一切工作正常。

现在,我想在Docker容器中运行它。不要犹豫指出我做错了什么,我刚开始使用Docker,正确设置权限(或至少可以正常使用)非常麻烦。

Dockerfile:
FROM centos
MAINTAINER Patrick Bucher "patrick.bucher@compa.ny"

RUN ["rpm", "-Uvh", "https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm"]
RUN ["yum", "-y", "install", "R", "wget", "git"]

RUN ["R", "-e", "install.packages('shiny', repos='http://cran.rstudio.com/')"]
RUN ["R", "-e", "install.packages('rmarkdown', repos='http://cran.rstudio.com/')"]
RUN ["R", "-e", "install.packages('DT', repos='http://cran.rstudio.com/')"]
RUN ["wget", "https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.5.3.838-rh5-x86_64.rpm"]
RUN ["yum", "-y", "install", "--nogpgcheck", "shiny-server-1.5.3.838-rh5-x86_64.rpm"]
RUN ["rm", "shiny-server-1.5.3.838-rh5-x86_64.rpm"]

RUN ["yum", "clean", "all"]

RUN ["mkdir", "-p", "/srv/shiny-server"]
RUN ["mkdir", "-p", "/var/log/shiny-server"]
RUN ["mkdir", "-p", "/var/lib/shiny-server"]

RUN ["ln", "-fs", "/usr/share/zoneinfo/Europe/Zurich", "/etc/localtime"]

COPY start-shiny /usr/bin/start-shiny

EXPOSE 3838

建立:
#!/bin/sh

mkdir -p apps
mkdir -p logs

rm -rf apps/used-space

docker build -t shinysrv

跑:
#!/bin/sh

iptables -I INPUT -p tcp -m tcp --dport 3838 -j ACCEPT

DIRS[0]=/srv/shiny-server
DIRS[1]=/var/log/shiny-server
DIRS[2]=/var/lib/shiny-server

docker run --privileged --name ssrv01 -dit -p 3838:3838 -v `pwd`/apps:${DIRS[0]} -v `pwd`/logs:${DIRS[1]} shinysrv sh

for DIR in ${DIRS[@]}; do
docker exec --privileged ssrv01 chown -R shiny:shiny $DIR
docker exec --privileged ssrv01 chmod -R 755 $DIR
done

docker exec --user shiny ssrv01 start-shiny

开始发光:
#!/bin/sh

git clone https://github.com/patrickbucher/used-space.git /srv/shiny-server/used-space
exec shiny-server 1> /tmp/shiny.out 2> /tmp/shiny.err &

连接:
#!/bin/sh

docker exec --user shiny -it ssrv01 sh

一切正常,服务器启动。但是当我进入localhost:3838 / used-space时,我看到一个空白页。现在开始介绍有趣的部分:我只需要打开 shell 程序( ./connect)并运行 touch /srv/shiny-server/used-space/ui.R,再次加载该页面即可-效果很好。

我的感觉是,这与Docker层有关,但我无法指出它的“错误”之处。有人可以吗? (我尝试了两种配置:一次在Arch Linux主机系统上,一次在CentOS虚拟系统上,使用VirtualBox在Windows 10上托管。行为完全相同。当我 touch另一个文件(例如 server.R)时,它不会开始工作。)

最佳答案

我解决了。 ui.R缺少library(DT),因此无法建立数据表。 ui.R可能先于server.R加载,后者再加载DT库。当我在ui.R上执行touch时,服务器重新加载并重新执行它,现在已正确加载了DT库。现在可以使用!

关于r - 仅在触摸Docker容器中的ui.R之后, Shiny 的应用程序才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45576296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com