docker桥接localhost端口

在本地计算机上有一个在Port 50160上运行的chatbot服务。 此端口用于接收来自泊坞窗容器中的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(在我的机器上运行)。 任何想法?

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

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

我读了评论,你不能改变这个地址(顺便说一句,硬编码从来就不是一个好主意)。 另一个解决scheme是在容器本身中添加一个iptables规则,以将入站stream量redirect到端口50160到主机。 我不是很喜欢这个想法,因为它很hacky,但它应该工作。

 docker run --network=host 

可以将容器的networking设置为主机,这样就可以从容器中访问。 但是这在osx上不起作用