Невозможно настроить отображение портов для работы с Shiny в Docker с каплей Digital Ocean - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь заставить приложение Shiny работать в качестве веб-сервера на капле Digital Ocean, используя изображение докера от Rocker.Кажется, все работает нормально, но почему-то я не могу получить доступ к странице через браузер.

Кажется, что Docker правильно подключен к порту 80 на дроплете: enter image description here

Кажется, что R правильно слушает порт 80 внутри контейнера Docker: enter image description here

Список процессов Docker выглядит правильно: enter image description here

Asвыводит ли список машин: 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.

Запуск примера nginx hello world на DigitalOcean - та же капля, другой образ докера - работает просто отлично, включая использование порта 80.

Мой Shiny-код явно запрашивает порт 80:

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

1 Ответ

0 голосов
/ 19 октября 2018

Docker привязывается к порту 80 только на интерфейсе ipv6, а не на интерфейсе ipv4, о чем вы можете узнать по отсутствующей записи tcp *:http в выводе netstat.

Из-за этого ваше подключение к ipv4IP не удается, и curl и другие возвращают сообщение «Соединение отказано».

См., Например, это переполнение стека , в котором подробно описывается, как заставить Docker использовать интерфейс ipv4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...