私は一緒にハッキングしたR Shinyデモアプリ(「中古スペース」)で奇妙な現象を目撃しています。ランダムなデータで埋められたデータテーブルで構成されています。ここでは、コードです:光沢のあるアプリは、Dockerコンテナ内のui.Rに触れた後にしか動作しません。
ui.R:
library(shiny)
shinyUI(fluidPage(
dataTableOutput("foobar")
)
)
server.R:runApp()
でRStudioから始めたとき
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)
})
すべてが完璧に動作します。
これをDockerコンテナで実行します。私が間違っていることを指摘するのを躊躇しないで、私はちょうどDockerを使い始めました。そして、権限を正しく(または働くことで)得ることはかなり面倒です。
Dockerfile:
FROM centos
MAINTAINER Patrick Bucher "[email protected]"
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に行くと、空白のページが表示されます。今すぐ楽しむことができます:私はシェル(./connect
)を開き、touch /srv/shiny-server/used-space/ui.R
を実行してページを再度ロードしてください。それは完全にうまくいきます。
これはDockerレイヤーに関連していると私は感じていますが、「間違っている」ことを指摘できません。誰もすることができますか? (アークLinuxホストシステムでは一度、CentOS仮想システムでは一度、VirtualBoxを使用してWindows 10でホストされていましたが、動作はまったく同じです。touch
別のファイルの場合は、server.R
と言うと、 tは仕事を始めます)
これをgit repoとして与えることはできますか? –
ドッカー:https://github.com/patrickbucher/shinysrv –
アプリ:https://github.com/patrickbucher/used-space –