Spring boot внутри контейнера Docker выбрасывает java.net.ConnectException: соединение отклонено (соединение отклонено) - PullRequest
0 голосов
/ 27 августа 2018

Приложение client отправляет данные json на сервер localhost: 8080, который упакован и запускается как образ докера. Серверы работают нормально при ручной отправке JSON с помощью приложения Postman Chrome. Проблема заключается в том, что клиент с докерской версией выдает java.net.ConnectException: Connection refused (Connection refused) при попытке записать json в HttpURLConnection с использованием OutputStreamWriter. Как заставить это работать?

Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/client-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8088
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Оба клиента должны работать в одной сети. Так что создайте сетевой мост MY_BRIDGE:

docker network create MY_BRIDGE

Присоедините оба контейнера к мосту при их запуске. Дайте контейнеру сервера имя MY_SERVER:

docker run --network MY_BRIDGE --name MY_SERVER MY_SERVER_IMAGE

docker run --network MY_BRIDGE MY_CLIENT_IMAGE

Код вашего приложения должен быть изменен с localhost:8080 на MY_SERVER:8080 до запуска клиентского контейнера.

См. Документация Docker Bridge

0 голосов
/ 27 августа 2018

В докере каждый контейнер имеет свой собственный виртуализированный сетевой стек - localhost - это адрес интерфейса обратной связи контейнера, а не адрес интерфейса обратной связи хоста.

Вам необходимо настроить клиент для подключения к серверу, используя его имя хоста. Просто имя контейнера сервера, если вы используете docker-compose, или имя хоста хост-машины докера, если вы запускаете контейнеры вручную.

Ссылка: Сеть с автономными контейнерами .

...