首页 > 解决方案 > 端口转发的 Docker 和 Plumber 问题

问题描述

我试图通过 Docker 公开我的管道工服务器。我从 RStudio 中的管道工那里得到一个日志,它正在监听我想要的端口。并且 swagger 启动并运行良好(通过 swagger 在我的浏览器中连接到 8787 的 Rstudio 的暴露端口,API 工作正常)。

我正在运行这个命令:

docker run -e PASSWORD=rstudio --rm -it -p 8787:8787 -p 3038:3038 -v "/Users/my_name/Google Drive/r_files":"/home/rstudio/r-docker-tutorial" 摇杆/诗

如果我做:

卷曲http://localhost:3038

我收到“来自服务器的空回复”

同样,如果我尝试在 Postman 中达到我的端点,我会得到“无法得到任何响应”

因此,看来该端口没有被 Docker 成功代理,但我有点卡住了,因为这没有多大意义!

有没有人有任何想法?

谢谢

标签: rdockerplumber

解决方案


这是我们用来公开管道工 API 的模板 Dockerfile:

Dockerfile

FROM rocker/r-ver:4.0.0

WORKDIR /src

RUN apt-get update && apt-get install -y --no-install-recommends \
  git-core \
  libssl-dev \
  libz-dev \
  libcurl4-gnutls-dev \
  libsodium-dev

RUN install2.r --error plumber \
  data.table \
  xgboost 

COPY ./startup.R /var
COPY ./plumber.R /var

EXPOSE 8004
ENTRYPOINT ["R", "-f", "/var/startup.R", "--slave"]

启动.R

library(plumber)
pr <- plumb("plumber.R")
pr$run(host = "0.0.0.0", port = 8004)

水管工

#* Health check
#* @get /
#* @serializer unboxedJSON
function() {
    list(status = "OK")
}

推荐阅读