Сделайте запрос к весеннему API, запущенному в контейнере docker с хоста windows - PullRequest
0 голосов
/ 09 июля 2020

Итак, я поискал ответ по этому поводу, но либо люди не решают проблему, либо говорят, что нет проблем с этим на их компьютере (ma c или linux). Похоже, это может быть проблема windows.

У меня есть Spring api, работающий в контейнере docker (контейнер linux). Я использую docker desktop на windows, и я пытаюсь сделать запрос (в insomnia / postman / wtv) к этому api.

Если я запускаю api локально, следующий запрос будет работать отлично:

http://localhost:8080/api/task/

Здесь будут перечислены несколько элементов задачи.

Я поместил это приложение в контейнер следующим образом:

Dockerfile

FROM openjdk:11.0.7
COPY ./target/spring-api-0.0.1-SNAPSHOT.jar /usr/app/
WORKDIR /usr/app
RUN sh -c 'touch spring-api-0.0.1-SNAPSHOT.jar'
ENTRYPOINT ["java", "-jar", "spring-api-0.0.1-SNAPSHOT.jar"]

docker -compose.yml

version: '3.8'
services:
  api:
    build: .
    depends_on:
      - mysql
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/test?createDatabaseIfNotExist=true
    ports:
      - "8080:80"

  mysql:
    image: mysql
    ports:
      - "3306:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_USER=root
    - MYSQL_PASSWORD=root
    - MYSQL_DATABASE=test

Если я сделаю docker -compose, это будет работать без проблем:

Приложение Spring, работающее в контейнере docker

Проблема в том, что если я попытаюсь вызвать ту же конечную точку, что и раньше, с localhost, я не получу никакого ответа. Insomnia возвращает сообщение об ошибке: Ошибка: сервер ничего не вернул (без заголовков, без данных)

Я также пытался подключиться к ip контейнера (получил его от docker inspect), но безуспешно.

Порты представлены в docker -compose.yml. Что мне не хватает?

Заранее спасибо.

1 Ответ

1 голос
/ 09 июля 2020

Отображение портов неверно. Приложение весенней загрузки запущено с 8080 (из изображения, которое я вижу) внутри контейнера, и оно должно быть сопоставлено с 8080 внутри контейнера.

Это должно быть, как показано ниже:

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