r - 配置 Docker 容器和 R 以允许从容器内部进行 API 查询?
问题描述
我目前有一个 R Shiny 应用程序在 Docker 容器内愉快地运行,但是该应用程序或任何其他 R 实例查询 API 的任何尝试都会超时。容器内的任何 R 实例都可以到达外部世界(例如,通过 HTTPS 下载新包)但不能使用 HTTPS 完成 API 调用。我已经确认,无论是否在查询中指定端口 443,该查询在使用 HTTPS 的容器外就像一个魅力。在尝试解决此问题时,我现在还在 Dockerfile 和 docker-compose.yml 中公开了端口 443。
允许 R 从我缺少的 Docker 容器中进行 API 调用是否有技巧?
示例查询尝试:
# Full query results for geoindicators based on ecosite
results_full <- httr::GET("https://api.landscapedatacommons.org:443/api/geoindicators?EcologicalSiteId=R036XB006NM")
# Grab only the data portion
results_raw <- results_full[["content"]]
# Convert from raw to character
results_character <- rawToChar(results_raw)
# Convert from character to data frame
results <- jsonlite::fromJSON(results_character)
docker-compose.yml 内容:
version: "3"
services:
app:
build: .
ports:
- 3838:3838
- 443
volumes:
- ./:/srv/benchmark-histograms
Dockerfile 内容:
FROM rocker/shiny:latest
RUN apt-get update && apt-get install -y \
sudo \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev \
libxt-dev \
libssl-dev \
libssh2-1-dev
RUN R -e "install.packages('httr', repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('jsonlite', repos='http://cran.rstudio.com/')"
EXPOSE 3838
EXPOSE 443
CMD ["R", "-e", "shiny::runApp('/srv/benchmark-histograms', host = '0.0.0.0', port = 3838)"]
解决方案
推荐阅读
- unity3d - Unity 中的浮动对象
- node.js - 让multer上传一个asyc函数
- mysql - 添加“NET START”权限来编程?
- javascript - 在 JQuery 中为 ForLoop 中的项目显示/隐藏 div
- python-3.x - 我的 ProcessPoolExecutor 没有运行整个函数
- html - 如何修复 CSS 链接悬停?
- r - 如何使用分组数据的动态回归模型预测 arima?
- python - Spyder中的多处理挂起
- c++ - 使用 opencv/c++ 计算两个图像之间的相似率
- asp.net-mvc - 请求和响应具有相似参数的多个 REST 服务