【问题标题】:docker bridging localhost portdocker桥接本地主机端口
【发布时间】:2017-11-15 10:30:39
【问题描述】:

在我的本地计算机上的端口50160 上运行了一个聊天机器人服务。此端口用于接收来自 docker 容器中我的 nodejs-service 的消息。要将消息发送到聊天服务,docker-container 具有端口8080open。这很好用。

我使用docker run -p 8080:8080 registry.gitlab.com/abc/def/adapter-xyz 启动它。

但是从 docker-container 向聊天机器人发送响应会在 docker 容器中返回以下错误:

ChatConnector: message received.
Error: connect ECONNREFUSED 127.0.0.1:50160
    at Object.exports._errnoException (util.js:1020:11)
    at exports._exceptionWithHostPort (util.js:1043:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14)

它似乎无法向聊天机器人(在我的机器上运行)发回响应。任何想法?

【问题讨论】:

  • 不应该是0.0.0.0:50160吗?
  • 我无法更改此 IP 地址,因为遗憾的是它是从依赖项中设置的。从 docker 外部运行服务工作正常。

标签: node.js docker networking botframework


【解决方案1】:

您应该使用主机的 IP 地址而不是 127.0.0.1。可以通过执行轻松提取地址:

docker network inspect -f '{{ range .IPAM.Config }}{{.Gateway}}{{end}}' bridge

我在 cmets 中读到您无法更改该地址(顺便说一句,硬编码绝不是一个好主意)。另一种解决方案是在容器本身中添加一个 iptables 规则,以将入站流量重定向到端口 50160 到主机。我不太喜欢这个想法,因为它很老套,但它应该可以工作。

【讨论】:

    【解决方案2】:
    docker run --network=host 
    

    可以将容器的网络设置为主机,这样就可以从容器访问.127.0.0.1。 但这在 osx 上不起作用

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 2018-06-02
      • 1970-01-01
      • 2020-09-04
      • 2020-07-24
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多