我正在尝试为一个闪亮的应用程序构建一个Dockerfile。正在使用的软件包:Shiny,ggplot2。使用以下命令“ Rscript app_run.R”,将通过app_run.R文件运行该应用程序(app.R)
我使用了一个摇杆容器,但是我认为它已经安装了各种软件包。有人知道如何构建一个绝对基本的Dockerfile来运行Shinyapp吗? Dockerfile中是否有任何过时的行?
我构建的Dockerfile:
ERROR in ./node_modules/redis-parser/lib/hiredis.js
Module not found: Error: Can't resolve 'hiredis' in 'C:\Users\Dennis\git\keep-tabs\node_modules\redis-parser\lib'
非常感谢。
答案 0 :(得分:3)
从我的角度来看,您的Dockerfile
仅存在一个小问题:可以在哪个端口上运行闪亮的应用程序?默认情况下,shiny使用随机端口,当您运行docker容器并希望将某个单独的端口从容器映射到主机时,这并不是真正有用。我通常这样使用端口3838
:
FROM rocker/r-ver:3.5.1
#install necessary libraries
RUN R -e "install.packages(c('ggplot2','shiny'))" \
&& echo 'options(shiny.port = 3838, shiny.host = "0.0.0.0")' >> /usr/local/lib/R/etc/Rprofile.site \
&& rm -rf /tmp/*
EXPOSE 3838
COPY . /usr/local/src/app
WORKDIR /usr/local/src/app
CMD ["Rscript","app_run.R"]
以后我可以使用
docker run -p 3838:3838 <shiny_image>
,该应用将在http://localhost:3838
上可用。
如果您想要更小的东西,可以使用
FROM debian:buster-slim
RUN apt-get update \
&& apt-get install --yes --no-install-recommends \
r-cran-shiny r-cran-ggplot2 \
&& echo 'options(shiny.port = 3838, shiny.host = "0.0.0.0")' >> /etc/R/Rprofile.site \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
EXPOSE 3838
COPY . /usr/local/src/app
WORKDIR /usr/local/src/app
CMD ["Rscript","app_run.R"]
如果没有所有开发包,则可能会更小。