首页 > 解决方案 > 配置 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)"]

标签: rdockershinydocker-compose

解决方案


推荐阅读