Приложение R в контейнере Docker: невозможно загрузить отчет в формате PDF (ошибка: нет такого файла или каталога) Knitr / Rmarkdown

Я создавал докер-контейнер для приложения R и постоянно сталкивался с ошибкой при загрузке отчета в формате PDF. Функция отчета в формате PDF отлично работает в R на локальном компьютере, но при создании контейнера выдает ошибку, указанную ниже. Я попытался принудительно установить определенные пакеты, а именно Knitr и Rmarkdown, как упоминалось в других вопросах, однако он по-прежнему показывает ту же ошибку. В загружаемом файле Chrome просто написано «Failed - Server Problem». Я протестировал загрузку файла CSV с помощью приложения, которое работает нормально, поэтому я считаю, что это проблема с созданием и загрузкой отчета в формате PDF с уценкой.

Я включил сборочный Dockerfile в помощь. Любые предложения были бы потрясающими!

Спасибо!

ДОКЕРФАЙЛ:

FROM openanalytics/r-base

MAINTAINER ________

# system libraries of general use
RUN apt-get update && apt-get install -y \
    sudo \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev \
    libssh2-1-dev \
    libxml2-dev \
    libssl1.0.0 \
    libpq-dev \
    git \
    texlive-full \
    html-xml-utils \
    libv8-3.14-dev

# system library dependency for the app

RUN apt-get update

# install packages for R

RUN R -e "install.packages(c('hms','devtools'), repos='https://cloud.r- 
project.org/')"

RUN R -e "require(devtools)"

RUN R -e "install.packages(c('car'), repos='https://cloud.r-project.org/')"

RUN R -e "devtools::install_version('readxl', version = '1.0.0', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('DT', version = '0.2', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('shinydashboard', version = '0.6.1', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('knitr', version = '1.18', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('magrittr', version = '1.5', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('ggrepel', version = '0.7.0', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('dplyr', version = '0.7.4', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('Rcpp', version = '0.12.14', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('rhandsontable', version = '0.3.4', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('shinyjs', version = '0.9.1', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('V8', version = '1.5', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('data.table', version = '1.10.4-3', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('packrat', version = '0.4.8-1', 
repos='https://cloud.r-project.org/')"
RUN R -e "devtools::install_version('zoo', version = '1.8-1', 
repos='https://cloud.r-project.org/')"
RUN R -e "install.packages('shiny', repos='https://cloud.r-project.org/')"
RUN wget https://github.com/rstudio/rmarkdown/archive/v1.8.tar.gz
RUN R CMD INSTALL v1.8.tar.gz
RUN R -e "install.packages('xml2', repos='https://cloud.r-project.org/')"
RUN R -e "install.packages('rvest', repos='https://cloud.r-project.org/')"
RUN wget https://cran.r- 
project.org/src/contrib/Archive/kableExtra/kableExtra_0.3.0.tar.gz
RUN R CMD INSTALL kableExtra_0.3.0.tar.gz

# copy the app to the image
RUN mkdir /root/tsk
COPY tsk /root/tsk

COPY Rprofile.site /usr/lib/R/etc/

EXPOSE 3838

CMD ["R", "-e", "shiny::runApp('/root/tsk')"]

ОШИБКА ОТ ДОКЕРА:

Listening on http://0.0.0.0:3838
Warning in normalizePath(path, winslash = winslash, mustWork = mustWork) :
  path[1] = "/tmp/RtmpMu8ezy/TSK.Rmd": No such file or directory
Warning: Error in tools::file_path_as_absolute: file '/tmp/RtmpMu8ezy/TSK.Rmd' 
does not exist
  [No stack trace available]
Warning in normalizePath(path, winslash = winslash, mustWork = mustWork) :
  path[1] = "/tmp/RtmpMu8ezy/TSK.Rmd": No such file or directory
Warning: Error in tools::file_path_as_absolute: file '/tmp/RtmpMu8ezy/TSK.Rmd' 
does not exist
  [No stack trace available]
Warning in normalizePath(path, winslash = winslash, mustWork = mustWork) :
  path[1] = "/tmp/RtmpMu8ezy/TSK.Rmd": No such file or directory
Warning: Error in tools::file_path_as_absolute: file '/tmp/RtmpMu8ezy/TSK.Rmd' 
does not exist
  [No stack trace available]

Мне непонятно, откуда взялся TSK.Rmd. Это в одном из пакетов, которые вы устанавливаете?

r2evans 04.11.2018 08:20

Привет, r2evans, спасибо за ответ. TSK.Rmd - это таблица уценки R, которая используется для рендеринга PDF. Он находится в папке, в которой находятся все файлы проекта R. Контейнер докера должен иметь этот файл внутри контейнера. По крайней мере, я так думаю.

JamesLovesPython 04.11.2018 09:13

Хорошо, но единственная линия Dockerfile, которая может быть близка, - это COPY tsk /root/tsk, а не /tmp/Rtmp.../TSK.Rmd. Я просто не могу воспроизвести это как есть. (Кстати: никогда не используйте require(pkgname), если вы не проверите возвращаемое значение и не сделаете что-нибудь с этим знанием; используйте library(pkgname), если вы не планируете проверять, вернул ли requireTRUE. stackoverflow.com/a/51263513/3358272)

r2evans 04.11.2018 09:17

может быть проблема с PNADOC ... вы можете проверить в сообществе?

sai saran 04.11.2018 09:55

Привет, r2evans, спасибо за подсказку по require / library, обновлю мой файл докеров. Мне удалось решить проблему! Он просто менял имя файла CASE с tsk.Rmd на TSK.Rmd - причина этого в том, что тестирование всегда проводилось на OSX в среде IDE, которая не вызывала никаких ошибок, однако при создании контейнера с Ubuntu, который чувствителен к регистру, он не удалось найти файл разметки .. Все исправлено :)

JamesLovesPython 05.11.2018 10:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
439
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Простое изменение имени файла CASE с tsk.Rmd на TSK.Rmd - причина этого в том, что тестирование всегда проводилось на OSX в среде IDE, которая не вызывала никаких ошибок, однако при создании контейнера с Ubuntu, который чувствителен к регистру, это было невозможно чтобы найти файл уценки.

При сборке с разными операционными системами обязательно проверьте, чувствительна ли система к регистру! Легкая ошибка!

Другие вопросы по теме