You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny应用内写入Docker Volume?权限问题求解

问题解决:Shiny用户无法写入Docker挂载的Volume目录

项目目录结构

❯ tree ../write-to-volume-from-shiny
../write-to-volume-from-shiny
├── app.R
├── Dockerfile
└── shiny-server.conf

Dockerfile内容

FROM rocker/shiny:4.3.1
RUN rm /srv/shiny-server/index.html /etc/shiny-server/shiny-server.conf
COPY app.R /srv/shiny-server
COPY shiny-server.conf /etc/shiny-server/
RUN chmod -R 755 /srv/shiny-server/
EXPOSE 80
CMD ["/usr/bin/shiny-server"] 

app.R内容

library(shiny)

ui <- fluidPage(
  actionButton("touch", "Touch file"),
  textOutput("out")
)

server <- function(input, output, session) {
  observeEvent(input$touch, {
    if (fs::dir_exists("/data")) {
      fs::file_touch("/data/touch-test")
      # 此处报错,原因是shiny用户尝试写入root拥有的/data目录
    }
  })
}

shinyApp(ui, server)

shiny-server.conf内容

run_as shiny;

server {
  listen 80;
  location / {
    site_dir /srv/shiny-server;
    log_dir /var/log/shiny-server;
    directory_index on;
  }
}

操作步骤

配置Volume

docker volume create --name write-test

运行应用

docker buildx build . -t write
docker run --mount source=write-test,target=/data -p 80:80 write

问题现象

访问http://127.0.0.1:80点击按钮后报错,核心原因是shiny用户无权限写入root用户拥有的/data目录。


解决方法

方法一:构建镜像时预先设置目录权限(推荐)

修改Dockerfile,添加创建/data目录并将归属设置为shiny用户的步骤,从根源解决权限问题:

FROM rocker/shiny:4.3.1
RUN rm /srv/shiny-server/index.html /etc/shiny-server/shiny-server.conf
# 新增:创建/data目录并设置归属为shiny用户
RUN mkdir -p /data && chown shiny:shiny /data
COPY app.R /srv/shiny-server
COPY shiny-server.conf /etc/shiny-server/
RUN chmod -R 755 /srv/shiny-server/
EXPOSE 80
CMD ["/usr/bin/shiny-server"] 

重新构建镜像并运行:

docker buildx build . -t write
docker run --mount source=write-test,target=/data -p 80:80 write

方法二:启动容器时临时调整权限(适用于快速测试)

如果不想修改Dockerfile,可在启动容器时先执行权限修改命令,再启动Shiny服务:

docker run --mount source=write-test,target=/data -p 80:80 write sh -c "chown shiny:shiny /data && /usr/bin/shiny-server"

内容的提问来源于stack exchange,提问作者pietrodito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:17:14