Я работаю над простым проектом, состоящим из двух контейнеров докеров в сети докеров (мост). Проблема в том, что я получаю тайм-аут от бэкэнда при вызове его с хоста (через переадресацию порта на внешний интерфейс)
Настройка:
docker network create --driver bridge my-network
- Бэкэнд Java Spring предоставляет случайные кавычки из базы данных в
/randomQuote
конечной точке
docker run -it --rm --name backend --network my-network backend:1.0
Интерфейс Javascript для отображения полученной цитаты
docker run -it --rm --name frontend --network my-network -p 8081:8081 frontend:1.0
Код интерфейса для запроса данных (вызывается при нажатии кнопки):
const requestQuote = async() => {
let response = await fetch(apiUrl + getRandomQuoteEndpoint)
if(handleErrors(response)){
quote = await response.json()
displayQuote()
}
}
Я пробовал различные версии для apiUrl
, такие как:
http://backend:8080
http://172.18.0.2:8080
backend:8080
172.18.0.2:8080
Внутренний интерфейс:
@RequestMapping("/")
public interface QuotesRestController {
@CrossOrigin()
@GetMapping("/randomQuote")
public ResponseEntity<Quote> getRandomQuote();
}
На хосте http://localhost:8081/
правильно отображает frontend
контент, но при запросе цитаты I 'Я получаю GET http://172.18.0.2:8080/randomQuote net::ERR_CONNECTION_TIMED_OUT
.
curl
от внешнего интерфейса и корректно возвращает кавычки, поэтому проблема возникает только тогда, когда я переадресация портов и пытаюсь отобразить на хосте.
Я подозреваю, чтоэто связано с тем, что вызов backend: 8080 / randomQuote осуществляется из браузера моего хоста, который не находится в сети Docker, поэтому он не может связаться с бэкендом.
Это проблема с моей конфигурацией / кодом? Или я должен использовать другой подход?