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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:30:31