如何使用Docker在两个容器之间进行通信

Sas*_*kha 2 node.js docker

我在访问另一个容器中的一个容器路线时遇到问题。例如,我有两个微服务,分别称为user-serviceapi-gateway。我正在尝试访问api-gateway中的用户服务路由。

我的api-gateway文件可能如下所示

  const userServiceProxy = httpProxy(http://localhost:8093);
  this.app.post('/admin/register', async(req, res) => {

      userServiceProxy(req, res);

  });
Run Code Online (Sandbox Code Playgroud)

api-gateway在端口8080上运行

我的用户服务文件可能如下所示

 app.post('/admin/register', function (req, res) {
  res.send('POST request')
 })
Run Code Online (Sandbox Code Playgroud)

当我通过带有8080端口的api网关访问路由时,我无法调用该路由,但是当我尝试使用8093端口访问时,我可以看到结果。

我的docker-compose文件可能如下所示

 version: '3'
 services:
   api-gateway:
     container_name: api-gateway
     build: './api-gateway'
     ports:
       - "8080:8080"
     links:
       - user-service
   user-service:
     build: ./user-service
     container_name: user-service
     ports:
     - "8093:8093"
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,在此先感谢!

Wie*_*Wie 5

localhost 指容器内的本地主机,而不是主机系统。

使用Docker Networks并替换localhost为服务名称,例如api-gateway

如果容器在同一网络中,则地址http://api-gateway:8093应该可用。

另一种方法是在网络模式下运行容器host。这种隔离较少,但是地址localhost起作用了,因为容器现在在docker deamon的接口上运行