Я написал брокера mqqt, используя sbt и Akka. Я нормально работаю на своем локальном компьютере, но я не могу подключиться к брокеру, когда запускаю свой код в контейнере докера. Я вижу, что брокер работает нормально на порту 1883. Журналы Docker: -

[DEBUG] [02/17/2018 04:24:29.682] [run-main-0] [EventStream(akka://TcpServer)] Default Loggers started
[DEBUG] [02/17/2018 04:24:29.853] [TcpServer-akka.actor.default-dispatcher-4] [akka://TcpServer/system/IO-TCP/selectors/$a/0] Successfully bound to /127.0.0.1:1883
[INFO] [02/17/2018 04:24:29.860] [TcpServer-akka.actor.default-dispatcher-4] [akka://TcpServer/user/tcp] listening on port 1883

Мой файл докеров: -

FROM openjdk:8
ENV SBT_VERSION 0.13.16
RUN curl -L -o sbt-$SBT_VERSION.deb http://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && dpkg -i sbt-$SBT_VERSION.deb && rm sbt-$SBT_VERSION.deb &&  apt-get update && apt-get install sbt && sbt sbtVersion

WORKDIR /app
ADD . /app
EXPOSE 1883
CMD sbt run

Команда запуска Docker

docker run -v "$HOME/.ivy2":/root/.ivy2 -p 1883:1883 messanger:v1

Докер контейнер ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6a0a6aee317f        messanger:v1        "/bin/sh -c 'sbt run'"   6 hours ago         Up 6 hours          0.0.0.0:1883->1883/tcp   epic_goldberg

Я могу подключиться к брокеру, войдя на докер-машину, но не с моей локальной машины. Запуск журналов клиента mqtt в докере

root@e14df5e36def:/# python mqtt_subscriber.py
Connected with result code 0
<paho.mqtt.client.Client object at 0x7fe5a66cb510> None 1
1
abhishek_rathaur 17 Фев 2018 в 13:33

1 ответ

Лучший ответ

Из журналов вы можете увидеть привязку вашего приложения к интерфейсу обратной связи:

[DEBUG] [02/17/2018 04:24:29.682] [run-main-0] [EventStream(akka://TcpServer)] Default Loggers started [DEBUG] [02/17/2018 04:24:29.853] 
[TcpServer-akka.actor.default-dispatcher-4] [akka://TcpServer/system/IO-TCP/selectors/$a/0] Successfully bound to /127.0.0.1:1883 [INFO] [02/17/2018 04:24:29.860] 
[TcpServer-akka.actor.default-dispatcher-4] [akka://TcpServer/user/tcp] listening on port 1883

Ваше приложение должно быть привязано к интерфейсу 0.0.0.0, а не 127.0.0.1. Контейнеры имеют собственный интерфейс обратной петли с пространством имен, к которому перенаправление портов докеров не может получить доступ.

0
BMitch 17 Фев 2018 в 14:37