docker容器中的应用程序不能在同一个容器上调用服务

要启动我的docker集装箱,我使用:

docker run -p 5001:5001 -p 7777:7777 -i -t --entrypoint /bin/bash dc261bdea451 

可以看到我正在暴露两个端口:5001和7777

nodejs运行在nodejs上的端口5001&socko服务器上。通过浏览器,我可以通过http://localhost:5001http://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容器之外运行应用程序时,不会发生此问题。

有没有一个configuration选项,我错过了允许两个服务器上运行一个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.... 

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

  1. 您不需要使用端口映射( -p标志)来允许容器内部通信。 只有当你想从你的主机连接到容器时才需要。
  2. 通常build议每个容器只运行一个进程。 您可能希望查看在不同容器中运行这两个进程,并通过Dockernetworking连接它们。

无论如何,要调查问题启动容器中的bashvalidation端口7777上的服务可以从容器内( docker exec -it <container_id> bashtelnet localhost 7777 )到达。 如果它不在监听,你需要检查它是否绑定到正确的主机名。