使用端口公开的映射连接localhost中的两个docker实例

时间:2019-05-01 12:37:27

标签: docker

我有两个要连接的docker容器。一个docker实例( instance1 )与客户端连接,另一个docker( instance2 )想要与instance1连接。主要是当客户端向实例1发送请求时,instatnce1想要调用instance2服务并获得响应。然后将其传递给客户端。

当前,我正在使用以下docker命令来运行docker映像

实例1

docker run --name instance1 -d -p 8290:8290 composite-service

该实例具有服务-http://localhost:8290/composite。 该服务在 instance2

中调用该服务

实例2

docker run --name instance2 -d -p 8291:8290 service-backend

此实例具有服务-http://localhost:8291/service。当此调用服务响应一些数据到请求时。 (实际上,该服务在端口8290上启动,但在8291端口上暴露给外部)

问题是,当客户端在 instance1 http://localhost:8290/composite)中调用服务时,它显示错误

Connection refused or failed for : localhost/127.0.0.1:8291

我该如何解决?我想将这两个容器与docker run命令中传递的现有端口映射连接起来。

我尝试使用--link--net命令连接这两个容器,但结果相同。

2 个答案:

答案 0 :(得分:2)

在bellackn's Answer的基础上,我认为最简单的方法是使用docker compose。

dockercompose文件看起来像这样。

version: "3.7"
services:
  service:
    image: composite-service:latest
    ports:
      - 8290:8290
  backend:
    image: service-backend:latest
    expose:
      - 8290

现在,您无需使用docker run …,而是将上面的代码保存在名为docker-compose.yml的文件中,然后从保存文件的文件夹中运行docker-compose up

现在,您的复合服务不再应该调用http://localhost:8291/service,而应使用backend:8290 / service之类的东西。

您可以在官方文档中了解有关撰写文件的更多信息:https://docs.docker.com/compose/compose-file/

另一个好处是,这种service-backend仅可在Docker组成网络中访问(而不是在本地主机上)。 如果要访问后端,请删除expose语句并添加ports

答案 1 :(得分:0)

容器内的

localhost始终指容器本身(除非您以--net host开头)。

如果您希望容器进行通信,建议使用Docker Compose。然后,容器可以使用它们的服务名称相互引用(当然,如果您在同一网络中运行它们,但这是默认设置),即instance1可以通过instance2到达http://instance2:8291/service