2017-08-08 11 views
2

私は一緒にハッキングした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は仕事を始めます)

+0

これをgit repoとして与えることはできますか? –

+0

ドッカー:https://github.com/patrickbucher/shinysrv –

+0

アプリ:https://github.com/patrickbucher/used-space –

答えて

0

私はそれをうまく処理しました。 ui.Rにはlibrary(DT)がないため、データテーブルを構築できませんでした。 ui.Rはおそらくserver.Rの前にロードされ、DTライブラリをロードします。 ui.Rでtouchを実行すると、サーバーがリロードされて新しく実行され、DTライブラリが正しくロードされるようになりました。それは今働きます!

関連する問題