У меня есть проблема, когда я пытаюсь использовать 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 бесконечно ищет что-то в верхней части папки (снова и сноваснова):

Для запуска представлений используйте этот 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 внутри контейнера
Я потратил несколько часов на это дело, чтобы понять и разграничить проблему, ядействительно не понимаю, что происходит.Я был бы очень признателен, если бы кто-то мог разобраться со мной в этом деле.