gpt4 book ai didi

r - 当 API 在 Docker 容器中运行时,如何使用 R Plumber 中创建的 API?

转载 作者:行者123 更新时间:2023-12-02 21:08:27 24 4
gpt4 key购买 nike

我正在尝试创建一个基于 2 个 docker 容器的演示。每个容器都运行 R-Studio (rocker/verse)。

一个容器正在发布 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 而不是你的 plumb 文件,所以你云使用这个 docker 图像而不是 trestletech/plumber

如果您深入研究 docker 图像,您可以看到 rocker/verse 的入口点是端口 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com