I’m trying to build a Docker container to develop PDF reports for download through an R Shiny app. As such, I am installing TinyTeX to manage all the dependencies. I have my build setup through a Dockerfile
and a dummy report at the end that should run and initialize any files needed to make it work. I have tried this on both hub.docker.com and my local machine with no success. My local install of RStudio runs the Shiny apps successfully.
My minimal Dockerfile
is:
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')"
and dummy.Rmd
is
---
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
No matter which mirror I set, I am getting some variation of the message:
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.
whether I am running this build locally or on the docker hub server.
tinytex::is_tinytex()
returns TRUE
.
Edit: Fixed syntax error and dependency error, but does not reproduce the error.
2
Answers
Konrad Rudolph's comment on datawookie's answer was correct; the
tidyverse
image adds a lot of other dependencies. I simplified the image a lot by using a rocker script still in the image.Dockerfile
:Thank you all for your help! I'm not sure what was causing the original problem, but it was most likely a misconfigured installation. And my own inexperience (read incompetence). I apologize for not submitting a runnable reduced problem that replicated the issue, but thank you for helping me resolve it regardless.
In your original
Dockerfile
you should haveThe two package names need to be passed as a vector, so wrap them in
c()
.I’d suggest rather using the
rocker/tidyverse
base image though, which is set up for using TinyTeX.