docker桥接localhost端口

时间:2017-11-15 10:30:39

标签: node.js docker networking botframework

我的本​​地计算机上的端口50160上运行了一个chatbot服务。此端口用于从docker容器中的nodejs-service接收消息。要将消息发送到聊天服务,docker-container的端口8080将打开。这很好。

我使用docker run -p 8080:8080 registry.gitlab.com/abc/def/adapter-xyz开始。

但是从docker-container向chatbot发送响应会在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)

似乎无法向chatbot发送回复(在我的机器上运行)。任何的想法?

2 个答案:

答案 0 :(得分:2)

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

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

我在评论中读到你不能改变那个地址(顺便说一句,硬编码永远不是一个好主意)。另一种解决方案是在容器本身中添加iptables规则,以将入站流量重定向到端口50160到主机。我不是很喜欢这个想法,因为它非常hacky但它​​应该有效。

答案 1 :(得分:0)

docker run --network=host 

可以将容器的网络设置为主机,因此您可以从容器中访问.127.0.0.1。 但这不适用于osx