Docker构建时R TinyTeX无法连接CTAN镜像的问题求助
问题描述
我正在构建Docker容器,用于通过R Shiny应用生成可下载的PDF报告,选择TinyTeX管理LaTeX依赖。本地RStudio中Shiny应用运行正常,但无论本地还是Docker Hub构建都失败。
极简Dockerfile
FROM rocker/r-ver:4.3.2 RUN apt-get update && apt-get install -y \ sudo \ pandoc \ pandoc-citeproc \ && apt-get update && apt-get upgrade -y\ && apt-get clean && apt-get autoremove --purge RUN R -e "install.packages(c('rmarkdown','tinytex')); tinytex::install_tinytex(force=TRUE)" COPY dummy.Rmd /root/dummy.Rmd RUN R -e "rmarkdown::render('/root/dummy.Rmd',output_file='dummy.pdf')"
dummy.Rmd内容
--- title: "Dummy Report" author: "Me" date: "`r Sys.Date()`" output: pdf_document: extra_dependencies: ["booktabs","anyfontsize"] documentclass: article classoption: a4paper header-includes: - \usepackage{booktabs} - \usepackage{longtable} - \usepackage{array} - \usepackage{multirow} - \usepackage[table]{xcolor} - \usepackage{wrapfig} - \usepackage{float} - \usepackage{colortbl} - \usepackage{pdflscape} - \usepackage{tabu} - \usepackage{threeparttable} - \usepackage[normalem]{ulem} - \usepackage{anyfontsize} - \usepackage[]{fancyhdr} --- ## R Markdown Sample Text
错误信息
cannot contact mirror.ctan.org, returning a backbone server! /root/.TinyTeX/bin/x86_64-linux/tlmgr: TLPDB::from_file could not initialize from: https://www.ctan.org/tex-archive/systems/texlive/tlnet/tlpkg/texlive.tlpdb /root/.TinyTeX/bin/x86_64-linux/tlmgr: Maybe the repository setting should be changed. /root/.TinyTeX/bin/x86_64-linux/tlmgr: More info: https://tug.org/texlive/acquire.html ! LaTeX Error: File `multirow.sty' not found. ! Emergency stop.
已确认tinytex::is_tinytex()返回TRUE,修正过语法和依赖错误,但问题仍存在。
解决方案
1. 更换CTAN镜像源
构建时CTAN镜像连接失败导致TinyTeX无法自动安装缺失包,指定稳定镜像源安装TinyTeX:
修改Dockerfile中对应行:
RUN R -e "install.packages(c('rmarkdown','tinytex')); tinytex::install_tinytex(force=TRUE, repository = 'https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/')"
2. 提前安装所有依赖LaTeX包
避免渲染时动态安装包失败,提前用tinytex::tlmgr_install()安装所需包,在Dockerfile中添加:
RUN R -e "tinytex::tlmgr_install(c('booktabs', 'longtable', 'array', 'multirow', 'xcolor', 'wrapfig', 'float', 'colortbl', 'pdflscape', 'tabu', 'threeparttable', 'ulem', 'anyfontsize', 'fancyhdr'))"
3. 简化LaTeX依赖声明
dummy.Rmd中extra_dependencies已包含booktabs和anyfontsize,去掉header-includes里的重复声明:
--- title: "Dummy Report" author: "Me" date: "`r Sys.Date()`" output: pdf_document: extra_dependencies: ["booktabs","anyfontsize"] documentclass: article classoption: a4paper header-includes: - \usepackage{longtable} - \usepackage{array} - \usepackage{multirow} - \usepackage[table]{xcolor} - \usepackage{wrapfig} - \usepackage{float} - \usepackage{colortbl} - \usepackage{pdflscape} - \usepackage{tabu} - \usepackage{threeparttable} - \usepackage[normalem]{ulem} - \usepackage[]{fancyhdr} --- ## R Markdown Sample Text
4. 优化系统包安装步骤
去掉不必要的apt-get upgrade -y,避免镜像构建不稳定:
RUN apt-get update && apt-get install -y \ sudo \ pandoc \ pandoc-citeproc \ && apt-get clean && apt-get autoremove --purge
内容的提问来源于stack exchange,提问作者Travis Smith
相关产品推荐
相关产品推荐

