我有一个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"
答案 0 :(得分:0)
尝试一下,在运行容器中执行id
。这将告诉您docker容器中用户的uid是什么,然后将您挂载的文件锁定为该id。
让我知道它是否有效。