要启动我的docker容器,请使用:
docker run -p 5001:5001 -p 7777:7777 -i -t --entrypoint /bin/bash dc261bdea451
我可以看到我暴露了两个端口:5001& 7777
nodejs
正在端口5001&上运行7777上的socko服务器。在浏览器中,我可以通过http://localhost:5001
&直接访问这些服务。 http://localhost:7777
。在端口5001上运行的nodejs应用程序调用在端口7777上运行的服务:
因此,通过调用http://localhost:5001
,可以调用http://localhost:7777
:
var request = require('request');
request("http://localhost:7777?param=param....
问题是未调用端口7777上运行的服务。我也尝试过:
var request = require('request');
request("http://127.0.0.1:7777?param=param....
但结果相同。
当我在docker容器之外运行应用程序时,不会发生此问题。
是否缺少配置选项,允许在一个docker容器上运行的两台服务器进行通信?
更新:
将主机名更改为机器泊坞窗容器的IP地址正在运行到达端点。所以改变它的工作原理:
var request = require('request');
request("http://localhost:7777?param=param....
到
var request = require('request');
request("http://my.ip.address:7777?param=param....
但这不是一个解决方案,因为它需要在部署后更新容器。
答案 0 :(得分:0)
-p
标志)来允许容器内部通信。只有当您想要从主机连接到容器时才需要这样做。无论如何,要调查此问题,请在容器中启动bash以验证端口7777上的服务是否可以从容器(docker exec -it <container_id> bash
,telnet localhost 7777
)中访问。如果它没有监听,你需要检查它是否绑定到正确的主机名。