Как указать iframe на URL в сети Docker? - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть два док-контейнера:

  • web, содержит nginx с некоторым статическим html
  • shiny, содержит веб-приложение R Shiny

При запуске блестящее веб-приложение доступно через localhost: 3838 на хост-машине, в то время как статический html-сайт доступен через localhost: 80.

Моя цель - сделать мультиконтейнерное приложениечерез docker-compose, где пользователи получают доступ к статическому html, а статический html иногда извлекает визуализации данных из shiny через <iframe src="url-to-shiny-application"></iframe>

Я не могу понять, как указать iframe на URL, который исходитв сети docker-compose.Большинство людей, как правило, размещают свои приложения Shiny на URL-адресах, которые доступны через Интернет (например, shinyapps.io), в качестве учебного проекта я хотел найти способ размещения контейнерного блестящего сервера рядом с nginx.

Желаемым результатом будет возможность просто написать <iframe src="shiny-container/app_x"></iframe> в статическом html, и он найдет app_x на блестящем сервере через сеть докеров.

Может ли это быть что-то, что можно разобрать через конфигурацию nginx

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Ответ на ваш вопрос уже:

блестящее веб-приложение доступно через localhost: 3838 на хост-машине

Итак, начните URL с http://localhost:3838. Если вам нужно, чтобы это было доступно с других хостов, или вы ожидаете, что опубликованный номер порта может когда-либо измениться, вам нужно будет передать параметр конфигурации, чтобы сказать, каков внешний URL-адрес, или установить прокси перед двумя другие контейнеры, которые могут выполнять маршрутизацию на основе пути.

В конечном итоге любой URL-адрес, введенный вами в <iframe src="...">, <a href="..."> и т. Д., Интерпретируется в браузере, который не работает в Docker. Это означает, что ссылки на вещи, которые могут выполняться в контейнерах Docker в контенте HTML, всегда должны использовать имя хоста хоста и опубликованный номер порта; они никогда не могут использовать внутренние имена узлов Docker.

1 голос
/ 11 апреля 2019

Вы пробовали это: https://docs.docker.com/compose/networking/?

Образец файла docker-compose:

version: "3"
services:
  web:
    image: web
    ports:
      - "8000:8000"
  shiny:
    image: shiny
    ports:
      - "3838:3838"

Теперь каждый контейнер может найти имя хоста web или блестящий и получить IP-адрес соответствующего контейнера.

и используйте <iframe src="http://web:8000"/> или порт 80, или 8080, или то, что вы настроили в файле Docker.

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