docker容器中的应用程序无法在同一容器上调用服务

时间:2017-01-07 14:09:39

标签: node.js docker

要启动我的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....

但这不是一个解决方案,因为它需要在部署后更新容器。

1 个答案:

答案 0 :(得分:0)

  1. 您不需要使用端口映射(-p标志)来允许容器内部通信。只有当您想要从主机连接到容器时才需要这样做。
  2. 一般情况下,建议每个容器只运行一个进程。您可能希望查看在不同容器中运行这两个进程并通过Docker网络链接它们。
  3. 无论如何,要调查此问题,请在容器中启动bash以验证端口7777上的服务是否可以从容器(docker exec -it <container_id> bashtelnet localhost 7777)中访问。如果它没有监听,你需要检查它是否绑定到正确的主机名。