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

Docker化Golem构建的Shiny App时Bootstrap资源链接问题

Docker化Golem+Shiny应用时SCSS无法解析Bootstrap依赖的问题

我正尝试将使用{golem}构建的Shiny应用(已打包为库)进行Docker化,但遇到问题:custom.scss文件中包含Bootstrap依赖(如@include media-breakpoint-up(lg)),这些依赖在本地环境可自动关联,但在Docker容器中无法正常识别。应用同时使用了{bslib}。

本地安装运行应用时一切正常(即使在远程服务器上),但Docker化后无法解析custom.scss文件,与Bootstrap依赖的关联失效。启动应用时的错误信息:

Error: File to import not found or unreadable: /tmp/RtmpWzfgRD/R.INSTALL682a228ec/<APPNAME>/inst/app/www/custom.scss. on line 71:1 of /stdin >> @import "/tmp/RtmpWzfgRD/R.INSTALL682a228ec/<APPNAME>/inst/app/www/custom.scs ^

当前主题构建代码(app_ui.R)

bslib::bs_theme(version = 5, preset = "bootstrap") |>
    bslib::bs_add_rules(sass::sass_file("./inst/app/www/custom.scss")) # add complementary scss file

已尝试的方案

  • 本地应用运行完全正常,custom.scss可被正确解析,@include media-breakpoint-up(lg)功能符合预期,且custom.scss内未显式导入Bootstrap依赖;
  • 将完整Bootstrap仓库添加到应用中,并在custom.scss中通过@import 'bootstrap-main/scss/bootstrap';导入:应用可正常启动,但主题被严重破坏,几乎无法识别;
  • 只要不包含@include media-breakpoint-up(lg)调用,Docker容器中的应用即可正常运行。

Docker配置文件

Dockerfile_base

FROM rocker/verse:4.4.1
RUN apt-get update -y && apt-get install -y  make pandoc zlib1g-dev libicu-dev libxml2-dev libx11-dev git libcurl4-openssl-dev libssl-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libharfbuzz-dev libjpeg-dev libpng-dev libtiff-dev libgdal-dev gdal-bin libgeos-dev libproj-dev libsqlite3-dev libudunits2-dev && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /usr/local/lib/R/etc/ /usr/lib/R/etc/
RUN echo "options(renv.config.pak.enabled = FALSE, repos = c(CRAN = 'https://cran.rstudio.com/'), download.file.method = 'libcurl', Ncpus = 4)" | tee /usr/local/lib/R/etc/Rprofile.site | tee /usr/lib/R/etc/Rprofile.site
RUN R -e 'install.packages("remotes")'
RUN R -e 'remotes::install_version("renv", version = "1.0.11")'

Dockerfile

FROM energyvd_base
COPY renv.lock renv.lock
RUN R -e 'options(renv.config.pak.enabled = FALSE);renv::restore(exclude = "eneRgyVD")'
COPY eneRgyVD_*.tar.gz /app.tar.gz
RUN R -e 'remotes::install_local("/app.tar.gz",upgrade="never")'
RUN rm /app.tar.gz
EXPOSE 80
USER rstudio
CMD R -e "options('shiny.port'=80,shiny.host='0.0.0.0');library(eneRgyVD);eneRgyVD::run_app()"

运行步骤

docker build -f Dockerfile_base --progress=plain -t energyvd_base .
docker build -f Dockerfile --progress=plain -t energyvd:latest .
docker run -p 80:80 energyvd:latest

补充进展

我通过以下代码生成了不会破坏主题的custom.css文件:

sass::sass(input = sass::sass_file("inst/app/www/custom.scss"),
           output = "inst/app/www/custom.css",
           cache = NULL,
           options = sass::sass_options(
             include_path = system.file("lib/bs5/scss/", package = "bslib")))

之后可使用custom.css替代custom.scss,代码如下:

bslib::bs_theme(version = 5) |>
bslib::bs_add_rules(sass::sass_file("inst/app/www/custom.css"))

这仍未完全满足需求,我希望直接引用.scss文件,无需手动转换为.css,但已接近解决!


内容的提问来源于stack exchange,提问作者Michaël

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:52:32