У меня довольно простая реализация Docker, которая состоит из двух контейнеров, работающих в оверлейной сети: один с Apache HTTP 2.4.16, а другой с приложением Spring Boot (с использованием Tomcat 8).Контейнер Apache обрабатывает все внешние запросы https и трафик прокси (через mod_proxy_http) в приложение Spring Boot, работающее во втором контейнере.Мои конфиги прокси выглядят так:
ProxyPass /web-portal http://web-portal:8080/web-portal
retry=0
ProxyPassReverse /web-portal http://web-portal:8080/web-
portal
ProxyTimeout 300
Я устанавливаю Spring Boot / Tomcat server.connection-timeout
на то же значение, что и у Apache ProxyTimeout
Все это прекрасно работает при запускев докере;Тем не менее, я хочу перейти на Docker Swarm, и именно тогда я сталкиваюсь с проблемами.Я установил очень простую среду роя Docker с одним узлом, который также служит диспетчером (запустив docker swarm init
).Я использую те же контейнеры, которые я описал выше.Первоначально поведение такое, как и ожидалось: Apache передает трафик https, предназначенный для /web-portal
, приложению Spring Boot.Через некоторое время (что кажется непредсказуемым) прокси перестает работать, и я вижу такие записи в файле Apache ssl_error.log
:
[proxy_http:error] [pid 222] (70007)The timeout specified has expired:
[client 10.255.0.2:64842] AH01102: error reading status line from
remote server web-portal:8080, referer:
https://ojbc.org/web-portal/
[proxy:error] [pid 222] [client
10.255.0.2:64842] AH00898: Error reading from remote server returned by
/web-portal/activity, referer: https://ojbc.org/web-
portal/
Когда это происходит, единственные решения, которые я нашел, - этоdocker rm -f
HTTP-контейнер Apache и создайте новый контейнер (docker run
) или просто подождите некоторое время, и прокси снова начнет работать.
Чтобы исключить переменные, я удалил Spring Boot из уравнения и просто запустил старый Tomcat8 во втором контейнере, но проблемы все еще присутствовали.Я также пробовал проксировать через mod_proxy_ajp
вместо mod_proxy_http
- но я получаю похожие ошибки.
Я никогда не видел этих проблем при работе этих контейнеров в обычном (не Swarm) режиме Docker.Я обыскивал этот и другие сайты, пытаясь лучше понять, почему введение Docker Swarm может вызвать эти проблемы и какое может быть решение, но я в растерянности.Я предполагаю, что это может быть как-то связано с балансировкой нагрузки в Docker Swarm, но у меня нет особого подтверждения этой теории.Я ценю любые ваши мысли.Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию о моей среде.