我正在尝试创建一个基于2个Docker容器的演示。每个容器运行R-Studio(跷板/诗歌)。
一个容器正在发布API,另一个容器使用GET(在ShinyApp内部)读取结果。当我在水管工生成的Swagger中测试API时,它可以工作,但是当我使用Postman测试请求时,我得到的是R-Studio登录页面
我还可以在其中创建一个网络,并且两个容器都可以通信。我可以从另一个容器中读取的内容只是同一R-Studio登录页面
建立网络docker network create -d bridge my-net
环境发布APIdocker 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/