【问题标题】:How to consume from API created in R Plumber when API runs in Docker Container?当 API 在 Docker 容器中运行时,如何使用 R Plumber 中创建的 API?
【发布时间】:2019-06-06 12:24:52
【问题描述】:

我正在尝试创建一个基于 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 对象。

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

【问题讨论】:

    标签: r docker postman plumber


    【解决方案1】:

    可能是因为您的容器入口点是 RStudio 而不是您的 plumb 文件,所以您云使用此 docker 映像而不是 trestletech/plumber

    如果您深入了解 docker 图像,您可以看到 rocker/verse 的入口点是端口 8787,即 RStudio

    您可以从 Rocker/verse 构建自己的 docker 映像,并在注入管道工文件时更改入口点。

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

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

    【讨论】:

    • 完全正确。我最终为我的 API 发布者创建了一个专用容器。我只需要在docker run 命令中指定网络--network=my-net 和网络名称--net-alias=API。我的网址变成了API:8797,所以我可以执行 GET 调用!
    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多