Поскольку браузер работает на хост-компьютере, запрос отправляется из браузера, а не из контейнера докера.Мы можем использовать имя сервиса для связи между контейнерами;но не может использовать имя службы для доступа к контейнеру с хоста (на котором запущен браузер).Чтобы получить доступ к контейнеру с хост-машины, нам нужно предоставить порт из службы server
хост-машине, добавив необходимые порты, которые будут отображаться в docker-compose.yml
(при условии, что приложение работает на порте 8080 внутри контейнера server
):
server:
image: server
ports:
- '8081:8080'
Затем измените server:8080
на localhost:8081
в атрибуте action
.
<form action="http://localhost:8081/user/add" method="post">
...
</form>
Теперь, когда браузер отправляет запрос на localhost:8081
, запрос будет перенаправлен на8080
порт server
контейнера.
Если вы не хотите открывать порт из server
контейнера , вам необходимо прокси-запросы на определенный путь отКонтейнер frontend
в контейнер server
, использующий что-то вроде this для сервера Apache.Таким образом, вы можете использовать /api/user/add
для атрибута действия (предполагая, что /api
- путь прокси).Теперь браузер отправит запрос /api/user/add
в frontend
контейнер.Контейнер frontend
увидит, что URL начинается с /api
и перенаправит запрос в контейнер server
в сети докеров.