如何从Shiny应用程序访问Docker的卷?

时间:2019-05-23 16:21:52

标签: r docker shiny shiny-server

我有一个dockerized Shiny应用程序,需要从一些RDS文件中读取数据。这些RDS文件必须每月更新两次。我想用一个卷解决它,但是我的权限用户有问题。 Shiny应用程序以有光泽的用户身份运行,并且该应用程序没有对该卷目录的读取权限。我无法运行“ chown Shiny:shiny”命令,因为我失去了对主机中卷目录的权限。有什么办法可以解决这个问题?

提前谢谢!

Dockerfile

FROM rocker/shiny:3.5.3
...
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf 
COPY .Renviron /srv/shiny-server 
RUN chown -R shiny:shiny /srv/shiny-server/ 
RUN cd /srv/shiny-server && git pull origin features/DTedit

shiny-server.conf

# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server {
  listen 3838;

  # Define a location at the base URL
  location / {

    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  }
}

article谈到了这一点,但我无法解决。

更新: 最后,根据r2evans的评论,解决方案是通过chmod将755权限授予共享目录(卷)。这样,在主机端,我可以继续更新RDS文件,而在docker端,Shiny应用程序可以访问和读取文件,因为对其他人的权限为“ 5”。为了有效地刷新数据,我需要在将RDS文件覆盖到卷的目录后运行以下Docker命令:

docker exec -it container_name sh -c "cd /srv/shiny-server/ && touch /srv/shiny-server/restart.txt"

1 个答案:

答案 0 :(得分:0)

尝试一下,在运行容器中执行id。这将告诉您docker容器中用户的uid是什么,然后将您挂载的文件锁定为该id。 让我知道它是否有效。