我正在尝试创建一个基于2个Docker容器的演示。每个容器运行R-Studio(跷板/诗歌)。

一个容器正在发布API,另一个容器使用GET(在ShinyApp内部)读取结果。当我在水管工生成的Swagger中测试API时,它可以工作,但是当我使用Postman测试请求时,我得到的是R-Studio登录页面

我还可以在其中创建一个网络,并且两个容器都可以通信。我可以从另一个容器中读取的内容只是同一R-Studio登录页面

建立网络
docker network create -d bridge my-net
环境发布API
docker run -d --rm --network=my-net --net-alias=Prod -p 8797:8787 --name Prod rocker/verse

library(plumber)
#* Provide correct configuration automatically
#* @param part_num Part Location in the Group
#* @param grp_num Group Number
#* @get /config
function(part_num, grp_num) {
  # read the specification
  df1 <- read_csv("/home/myself/r-studio/verify-parts/master_spec.csv")
  # extract the needed element
  part_num <- as.numeric(part_num)
  grp_num <- as.numeric(grp_num)
  df1[[part_num]][[grp_num]]
}

plumb(file='api/plumber.R')$run()

执行来自Shiny App的GET请求的环境
docker run -d --rm --network=my-net --net-alias=Dev -p 8787:8787 --name Dev rocker/verse
library(httr)
url <- "172.19.0.2:8787/p/1c2808f8/config?grp_num=a&part_num=b"`
res <- GET(url)
# interpret the results
element <- rawToChar(res$content)
> output is html page with R studio

我期望输出是在Swagger中测试过的字符,但是为什么实际输出是html Web对象。

也许有更简单的方法来测试这种设置,感谢相关帮助,谢谢!

最佳答案

可能是因为您的容器入口点是RStudio而不是铅锤文件,所以您使用此docker镜像而不是trestletech/plumber进行云计算

如果您深入研究docker镜像,您会看到摇杆/诗歌的入口点是端口8787,即RStudio

您可以从rocker / verse创建自己的docker镜像,并在注入(inject)管道工文件时更改入口点。

管道工api使用的端口类似:

COPY ./api/plumber.R /etc/plumber.R
EXPOSE 8000
ENTRYPOINT ["R", "-f", "/etc/plumber.R", "--slave"]

关于r - 当API在Docker容器中运行时如何使用R Plumber中创建的API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56477572/

10-16 23:37
查看更多