【问题标题】:Cannot get port-mapping to work with Shiny on Docker with Digital Ocean droplet无法通过 Digital Ocean 液滴在 Docker 上使用 Shiny 进行端口映射
【发布时间】:2019-03-24 12:01:07
【问题描述】:

我正在尝试让 Shiny 应用程序在 Digital Ocean 液滴上作为 Web 服务器运行,使用的是 rocker 的 docker 图像。一切似乎都运行良好,但不知何故我无法通过浏览器访问该页面。

Docker 似乎正确地暴露在 droplet 上的 80 端口:

R 似乎正确地监听了 docker 容器内的 80 端口:

Docker 进程列表看起来正确:

与机器列表一样:

我启动容器的命令是:

docker run -d -p 80:80 --name ggplotgui jelkink/fpr

我的 Dockerfile 如下所示:

FROM rocker/shiny:latest
COPY . /srv/shiny-server/docker
RUN sudo apt-get install -y libssl-dev xdg-utils
RUN sudo R -e "install.packages(c('shiny', 'dplyr', 'plotly', 
'rmarkdown', 'ggplot2', 'readxl', 'haven', 'rio', 'stringr', 'readr', 
'devtools'))"
RUN chmod +x /srv/shiny-server/docker/continuous_shiny_run.sh
EXPOSE 80

CMD /srv/shiny-server/docker/continuous_shiny_run.sh

虽然,老实说,我也没有设法让它在我的本地 Docker 安装下工作,所以它可能与 DigitalOcean 无关。

在 DigitalOcean 上运行 nginx hello world 示例 - 相同的水滴,不同的 docker 映像 - 工作正常,包括使用端口 80。

我的 Shiny 代码明确请求端口 80:

shinyApp(ui, server, options = list(port = 80))

【问题讨论】:

  • 您看到的错误是什么? “curl yourserver.com”的输出是什么?
  • 连接被拒绝:无法连接到 142.93.182.11 端口 80:连接被拒绝

标签: docker shiny digital-ocean


【解决方案1】:

Docker 仅绑定到 ipv6 接口上的端口 80,而不是 ipv4 接口,您可以从 netstat 输出中缺少的 tcp *:http 条目中看出。

因此,您与 ipv4 IP 的连接不成功,并且 curl 和其他人返回“连接被拒绝”。

参见例如this Stack Overflow 问题,详细说明如何使 Docker 使用 ipv4 接口。

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 2014-12-06
    • 2021-06-25
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多