akka http: docker контейнер не подключается к серверу - PullRequest
0 голосов
/ 05 марта 2020

У меня есть приложение akka htpp, вот как я его связываю

val host = "0.0.0.0"
    val port = 8080

    val bindingFuture = Http().bindAndHandle(MainRouter.routes, host, port)
log.info("Server online ")
    StdIn.readLine()
    bindingFuture
      .flatMap(_.unbind()) // trigger unbinding from the port
      .onComplete(_ => system.terminate()) // and shutdown when done

Я использую sbt native packager для создания моего приложения docker image

я также добавил

dockerExposedPorts:= Seq(8080)

в мой build.sbt

я запускаю свой контейнер как docker run -p 8080: 8080 testapp: 0.0.1 --bind 0.0. 0.0

docker ps показывает

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2e8e7ae35b10        testapp:0.0.1     "/opt/docker/bin/tes…"   13 minutes ago      Up 13 minutes       0.0.0.0:8080->8080/tcp   recursing_hellman

, когда я нажимаю 0.0.0.0:8080 из браузера, я получаю

This site can’t be reached The connection was reset.
Try:

Checking the connection
Checking the proxy and the firewall
ERR_CONNECTION_RESET 

или postman

Could not get any response
There was an error connecting to 0.0.0.0:8080/event-id?id=132

пока на моей машине работает контейнер docker n c -zv 0.0.0.0 8080 возвращает

Connection to 0.0.0.0 8080 port [tcp/http-alt] succeeded!

внутри контейнера

docker exec -it 2e8e7ae35b10 bash

я пробовал

curl 'http://0.0.0.0:8080/health'
curl: (7) Failed to connect to 0.0.0.0 port 8080: Connection refused

мое приложение отлично работает за пределами docker

1 Ответ

0 голосов
/ 05 марта 2020

Я думаю, что проблема в том, что docker закрывает стандартный ввод по умолчанию, что может повлиять на ваше приложение из-за его запроса о вводе пользователем StdIn.readLine(). Решением может быть запустить контейнер с опцией -i, чтобы стандартный ввод оставался открытым .

Дайте мне знать, если это поможет !!

...