在Docker容器上运行水管工API

在Docker容器上运行水管工API,r,azure,docker,containers,plumber,R,Azure,Docker,Containers,Plumber,我想在Docker容器上运行管道工API 我尝试了以下两个DockerFile: 第一个Dockerfile FROM rstudio/plumber MAINTAINER Docker User <docker@user.org> RUN R -e "install.packages('broom')" RUN mkdir -p ~/application # copy everything from the current directory into th

我想在Docker容器上运行管道工API

我尝试了以下两个DockerFile:

第一个Dockerfile

FROM rstudio/plumber
MAINTAINER Docker User <docker@user.org>
RUN R -e "install.packages('broom')"
RUN mkdir -p ~/application

# copy everything from the current directory into the container
COPY "/" "application/"
WORKDIR "application/" 

# open port 80 to traffic
EXPOSE 80

# when the container starts, start the main.R script
ENTRYPOINT ["Rscript", "execute_plumber.R"]
两者都导致了以下错误:

* Downloading renv 0.12.0 from CRAN archive ... OK
* Installing renv 0.12.0 ... Done!
Successfully installed and loaded renv 0.12.0.
Error in library(plumber) : there is no package called ‘plumber’
Execution halted
对于第二个Dockerfile,我还尝试安装不同的linux库,例如

git-core
libcurl4-openssl-dev
xml2 openssl
他们都没帮上忙

我正在Azure上运行它。有什么建议吗

更新 在容器构建日志文件中,我可以清楚地看到
管道工
已成功安装

> install.packages('plumber')
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
also installing the dependencies ‘curl’, ‘Rcpp’, ‘later’, ‘BH’, ‘rlang’, ‘glue’, ‘R6’, ‘stringi’, ‘jsonlite’, ‘webutils’, ‘httpuv’, ‘crayon’, ‘promises’, ‘sodium’, ‘swagger’, ‘magrittr’, ‘mime’, ‘lifecycle’

...

* DONE (plumber)
在此输出中:

> install.packages('plumber')
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
also installing the dependencies ‘curl’, ‘Rcpp’, ‘later’, ‘BH’, ‘rlang’, ‘glue’, ‘R6’, ‘stringi’, ‘jsonlite’, ‘webutils’, ‘httpuv’, ‘crayon’, ‘promises’, ‘sodium’, ‘swagger’, ‘magrittr’, ‘mime’, ‘lifecycle’

...

* DONE (plumber)
看起来程序包正在安装到R站点库中,但是:

* Downloading renv 0.12.0 from CRAN archive ... OK
* Installing renv 0.12.0 ... Done!
Successfully installed and loaded renv 0.12.0.
Error in library(plumber) : there is no package called ‘plumber’
Execution halted
项目的
renv
自动加载程序(通常是项目
.Rprofile
的一部分)正在运行,这将设置项目使用私有库路径(与站点库隔离)

我怀疑您可以通过重新组织Dockerfile中的命令来解决这个问题;e、 g

FROM rocker/r-ver:4.0.2

# install the linux libraries needed for plumber
RUN apt-get update -qq && apt-get install -y \
  libssl-dev \
  libcurl4-gnutls-dev

# create the application folder
RUN mkdir -p ~/application

# copy everything from the current directory into the container
COPY "/" "application/"
WORKDIR "application/" 

# open port 80 to traffic
EXPOSE 80

# install plumber
RUN R -e "install.packages('plumber')"

# when the container starts, start the main.R script
ENTRYPOINT ["Rscript", "execute_plumber.R"]

换句话说,请确保在设置工作目录后调用
install.packages(“水管工”)

谢谢,我会尝试一下,但我认为
COPY
命令将失败,因为
RUN mkdir-p~/application
只在稍后执行,而且目录不存在yetSorry,是--应该更早地移动该命令。我将编辑我的回复。谢谢你,你的建议奏效了。容器现在正在运行,现在我需要能够访问我的API,但这是不同的问题
FROM rocker/r-ver:4.0.2

# install the linux libraries needed for plumber
RUN apt-get update -qq && apt-get install -y \
  libssl-dev \
  libcurl4-gnutls-dev

# create the application folder
RUN mkdir -p ~/application

# copy everything from the current directory into the container
COPY "/" "application/"
WORKDIR "application/" 

# open port 80 to traffic
EXPOSE 80

# install plumber
RUN R -e "install.packages('plumber')"

# when the container starts, start the main.R script
ENTRYPOINT ["Rscript", "execute_plumber.R"]