Проблемы при вызове внешней программы из R в Docker - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть проблема, когда я пытаюсь использовать webshot в блестящем приложении внутри контейнера докера.в зависимости от того, как я организовал shinyapp, иногда он работает хорошо, иногда нет.

Я создаю небольшую презентацию (пакет Dockerfile + R), содержащую 2 функции, используя run_app2 все в порядке,Я могу получить png файл из графика, используя run_app , вызов phantomjs застрял в начале.и ничего не происходит

webshot запустить инструкцию такого типа (используя пакет callr):

/usr/local/bin/phantomjs --ignore-ssl-errors=true /usr/local/lib/R/site-library/webshot/webshot.js [{"url":"/tmp/RtmpIObg1n/dygraph8103063cd.html","file":"/tmp/RtmpIObg1n/file84a4d60a.png","vwidth":992,"vheight":744,"delay":0.2,"zoom":1,"debug":true}]

используя run_app2, все в порядке,но с run_app phantomjs не удается запустить!

с помощью функции unix strace внутри контейнера Я обнаружил эту ошибку, показывающую, что phantomjs бесконечно ищет что-то в верхней части папки (снова и сноваснова):

strace phantomjs output

Для запуска представлений используйте этот Dockerfile

FROM rocker/tidyverse

RUN apt-get install -y openjdk-8-jre && R CMD javareconf
RUN apt update
RUN apt install -y htop strace nano bzip2
RUN R -e 'install.packages("remotes")'
RUN R -e 'install.packages("pacman")'
RUN R -e "pacman::p_load('webshot')"
RUN R -e 'webshot::install_phantomjs()'
RUN R -e "pacman::p_load('dygraphs')"
RUN R -e "pacman::p_load('shiny')"
RUN echo 'local({options(shiny.port = 3838, shiny.host = "0.0.0.0")})' >> /usr/local/lib/R/etc/Rprofile.site
RUN R -e 'remotes::install_github("VincentGuyader/webshotdocker")'
EXPOSE 3838
CMD R -e 'reprexsnapshot::run_app()'

Затем

docker build -t reprex .

А затем

 # OK
 docker run  -p 80:3838 reprex R -e 'reprexsnapshot::run_app2()'

 # not OK
 docker run  -p 80:3838 reprex R -e 'reprexsnapshot::run_app()'

Советы: вы можете добавить -cap-add=SYS_PTRACE --security-opt seccomp=unconfined, чтобы иметь возможность использовать strace внутри контейнера

Я потратил несколько часов на это дело, чтобы понять и разграничить проблему, ядействительно не понимаю, что происходит.Я был бы очень признателен, если бы кто-то мог разобраться со мной в этом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...