当前位置: 首页 > 知识库问答 >
问题:

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

华升
2023-03-14

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

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

第一期

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

这个实例有一个service-http://localhost:8291/service.当这个被调用的service响应请求的一些数据时。(实际上,这个服务是在端口8290上启动的,但是它暴露在端口8291的外部)

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

Connection refused or failed for : localhost/127.0.0.1:8291

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

我尝试了--link--net命令来连接这两个容器,但是结果是一样的。

共有2个答案

应和光
2023-03-14

容器中的localhost总是指容器本身(除非以--net host开头)。

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

乐正远
2023-03-14

根据贝拉克的答案,我认为最简单的方法是使用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,而是使用后端: 8290/service之类的东西。

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

一个额外的好处是service-backend只能在docker comuse网络中访问(不能在本地主机上访问)。如果您想访问您的后端,请删除暴露语句并添加端口。

 类似资料:
  • 本文向大家介绍Docker端口映射的实现,包括了Docker端口映射的实现的使用技巧和注意事项,需要的朋友参考一下 docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。 亦可使用Dockerfile文件中的EXPOSE指令来配置。 端口映射可使用-p、-P来实现: -p指定要映射的端口,一个指定端口上只可以绑定一个容器 -P将容器内部开放的

  • 类具有可以是两种类类型之一的属性,这就是为什么我试图创建类类型实现的接口 所以我不能使用目标实体,因为这两个类都可以使用。下面是错误堆栈:org.hibernate。AnnotationException:model.User中的未知mappedBy。登录时,引用的属性未知:model.login.user。请帮帮我

  • 问题内容: 所以我有3个端口应该暴露在机器的接口中。使用Docker容器可以做到这一点吗? 问题答案: 要只暴露一个端口,这是您需要做的: 要公开多个端口,只需提供多个参数:

  • 我有一个dockerized应用程序,其中有几个服务使用Docker-Compose运行。我想使用另一个docker-compose应用程序docker-elk将这个应用程序与elasticsearch/logstash/kibana(ELK)连接起来。两者都运行在开发中的同一台docker机器中。在生产中,情况可能就不是这样了。 如何配置应用程序的链接到ELK堆栈?

  • 问题内容: 我在Docker中设置了一个简单的节点服务器。 Docker文件 example.js 现在建立图像 现在在容器中运行 验证容器正在运行并且端口已映射: 现在,让我们附加到容器并验证服务器是否在其中运行: 并在容器命令行中输入: 看起来不错吧? 问题 当我在主机上执行相同的curl命令(或使用浏览器导航到http:// localhost:1337 )时,什么都看不到。 知道为什么容器

  • 所以我有3个端口应该暴露在机器的接口上。有可能用Docker容器做到这一点吗?