无法在具有Digital Ocean Drop的Docker上使用端口映射与Shiny一起使用

时间:2018-10-19 14:57:56

标签: docker shiny digital-ocean

我正在尝试使用Rocker的docker镜像,使Shiny应用程序在Digital Ocean Droplet上作为Web服务器工作。一切似乎都工作正常,但是以某种方式我无法通过浏览器访问该页面。

Docker似乎正确暴露在了Droplet的端口80上: enter image description here

R似乎正确侦听了Docker容器内的端口80: enter image description here

Docker进程清单看起来正确: enter image description here

机器列表也一样: enter image description here

启动容器的命令是:

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世界示例-相同的小滴,不同的docker映像-可以正常工作,包括使用端口80。

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

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

1 个答案:

答案 0 :(得分:1)

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

因此,您与ipv4 IP的连接不会成功,并且curl会返回“拒绝连接”。

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