【问题标题】:unable to connect to tcp port running in docker无法连接到在 docker 中运行的 tcp 端口
【发布时间】:2018-07-28 03:59:01
【问题描述】:

我使用 sbt 和 Akka 编写了一个 mqqt 代理。我在本地机器上运行良好,但是当我在 docker 容器中运行代码时无法连接到代理。我看到代理在端口 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

我的 dockerfile:-

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

docker 容器 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

我可以通过登录到 docker 机器而不是从我的本地机器连接到代理。在docker中运行mqtt客户端日志

root@e14df5e36def:/# python mqtt_subscriber.py
Connected with result code 0
<paho.mqtt.client.Client object at 0x7fe5a66cb510> None 1

【问题讨论】:

    标签: scala docker sbt akka


    【解决方案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。容器有自己的命名空间环回接口,docker 端口转发无法访问。

    【讨论】:

    • 对不起,我是 docker 新手。你能更具体一点吗?我尝试运行 -p 0.0.0.0:1883:1883 仍然无法连接
    • @abhishek_rathaur 您的应用程序,而不是 docker 命令。从您的应用程序的日志中,它显示它已绑定到环回接口。您需要更改代码或将配置传递给您的应用程序。
    • 非常感谢@bmitch。我将代理的 ip 从 127.0.0.1 更改为 0.0.0.0。现在工作正常。我想我需要阅读更多关于 docker 的理论
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2020-07-31
    相关资源
    最近更新 更多