Как использовать API, созданный в R Plumber, когда API работает в Docker Container? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь создать демо, основанное на 2 контейнерах докера.Каждый контейнер запускает R-Studio (рокер / стих).

Один контейнер публикует API, а другой контейнер читает результат, используя GET (внутри ShinyApp).Когда я тестирую API в Swagger, сгенерированном сантехником, он работает, однако, когда я тестирую Запрос с использованием 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()

Среда, выполняющая запросы GET от Shiny App

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 веб-объект.

Возможно, есть более простой способ проверить такую ​​настройку, спасибо за помощь, спасибо!

1 Ответ

1 голос
/ 07 июня 2019

Возможно, потому что вашей точкой входа в контейнер является RStudio вместо вашего отвесного файла, вы используете это облако в облаке вместо этого trestletech / plumber

Если вы покопаетесь в изображениях докера, вы увидите, чтоточка входа рокера / стиха - это порт 8787, который является RStudio

. Вы можете создать свой собственный образ докера из рокера / стиха и изменить точку входа при вводе файла сантехника.

Что-то вродечто с портом, используемым вашим водопроводчиком API:

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