Назад | Перейти на главную страницу

сделать docker-контейнер для прослушивания запросов от другого docker-контейнера

У меня есть 3 контейнера докеров (FrontEnd, Database и ApachePhp) в одной сети Docker. ApachePhp будет веб-сервером (Apache + PHP), который мне нужно сделать видимым только через FrontEnd, т.е. только запросы к ApachePhp должны приниматься через FrontEnd. У меня есть следующий файл конфигурации apache:

<VirtualHost *:80>
  ServerAdmin me@mydomain.com
  DocumentRoot /var/www/site

  <Directory /var/www/site/>
      <RequireAll>
          Require ip FrontEnd
      </RequireAll>
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Это правильный способ использования Require и получить желаемый результат?

Вам не нужно решать эту проблему в конфигурации apache. Пока вы не публикуете порт, докер не будет настраивать правило переадресации или прокси для отправки внешнего трафика в ваш контейнер. Нет необходимости открывать порт в докере (это только для документации). Единственные шаги, необходимые для взаимодействия между контейнерами докеров:

  1. Слушайте внутри своего приложения на всех интерфейсах (я думаю, вы сделали это с помощью *:80).
  2. Подключите контейнеры к общей сети докеров. Это происходит автоматически при развертывании с одним docker-compose.yml.
  3. На клиенте используйте встроенный DNS докера для имени хоста и подключитесь к порту контейнера. DNS Docker разрешит имя контейнера, а с помощью файлов compose также можно разрешить имя службы. Итак, если ваше имя контейнера / службы - phpbackend, вы должны подключиться из внешнего интерфейса к phpbackend:80.