我正在尝试使用Rocker的docker镜像,使Shiny应用程序在Digital Ocean Droplet上作为Web服务器工作。一切似乎都工作正常,但是以某种方式我无法通过浏览器访问该页面。
启动容器的命令是:
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))
答案 0 :(得分:1)
您可以从netstat输出中缺少的logging
条目中看出,Docker仅绑定到ipv6接口上的端口80,而不绑定到ipv4接口上。
因此,您与ipv4 IP的连接不会成功,并且curl会返回“拒绝连接”。
例如参见this Stack Overflow 问题,详细介绍了如何使Docker使用ipv4接口。