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

同一 host 的两个 docker-compose.yml 如何互相访问 http 服务?

国兴文
2023-07-27

我的情况是这样,在 host H 上,

有 docker-compose.yml A

version: "3.3"services:    nginx:        image: nginx:1.20        ports:            - "801:80"

有 docker-compose.yml B

version: "3.3"services:    nginx:        image: nginx:1.20        ports:            - "802:80"        extra_hosts:            - "host.docker.internal:host-gateway"

在 host A 上,curl localhost:801 可以访问。
但是进入 docker-compose.yml B 的 容器 nginx,curl host.docker.internal:801 缺无法访问,如何做到可以呢?

共有3个答案

白学
2023-07-27

先建一个自定义的网络:

docker network create mynetwork

然后,在这两个 Docker Compose 文件里,都加 networks 配置:

docker-compose.yml A:

version: "3.3"services:    nginx:        image: nginx:1.20        ports:            - "801:80"        networks:            - mynetworknetworks:    mynetwork:        external: true

docker-compose.yml B:

version: "3.3"services:    nginx:        image: nginx:1.20        ports:            - "802:80"        networks:            - mynetworknetworks:    mynetwork:        external: true
仇经武
2023-07-27

方法一:把 host.docker.internal 换成宿主机 ip

方法二:使用 docker 创建一个 「网络 A」,在两个 yaml 里面声明使用 「网络 A」,然后就可以使用 service name 互相访问,就是把 host.docker.internal 换成 nginx

齐宗清
2023-07-27

如果两个docker-compose.yml定义的服务都在同一个网络下,那么可以直接通过 服务名字 就可以访问到其他的容器。

比如:

version: "3.3"services:    nginx1:        image: nginx:1.20        ports:            - "801:80"    nginx2:        image: nginx:1.20        ports:            - "802:80"

在nginx2这个服务,访问nginx1的时候,就可以直接通过 nginx1 这个服务名字访问。
在容器2中执行

docker exec -it 826 bashroot@8269c4a5112b:/# curl -v nginx1 *   Trying 172.19.0.2:80...* Connected to nginx1 (172.19.0.2) port 80 (#0)
 类似资料:
  • 例如,我有两个心率监视器与我的平板电脑配对。我正在使用这样的代码来获取HRM设备列表: 然后,我在GUI中显示一个列表框,其中包含从设备[I]获取的设备名称。名称例如,我选择索引为0的设备。然后我可以访问it人力资源服务和人力资源管理特征: 除了心率,我还需要电池状态。如何访问同一(已选择)设备的电池服务?

  • 目前,我在一个连接到K8s Redis服务的K8s服务中使用了K8s API Pod,并且使用了它自己的K8s Pod。问题是,我使用NodePort的意思是两个都暴露在公众面前。我只想让公众访问API。问题是,如果我使Redis服务不公开,API就看不到它。有没有一种方法可以将两个服务连接起来,同时又不会将一个服务暴露在公众面前? 这是我的API服务YAML: 这是我的Redis服务YAML:

  • 问题内容: 有没有人在编写比较两个REST服务的测试方面有任何技巧?我们这样做是作为回归测试的一种形式。 我希望按照以下方式做一些事情: 向两个服务发送“ / 1”的GET并比较结果 向这两个服务发送POST,然后比较结果 向两个服务发送一个PUT,并比较结果 这个想法是: 每个操作都发送到两个服务 结果应该相同 REST服务是用Java / Jersey编写的,因此使用它是理想的,但是人们发现有

  • 我有以下情况: 我有两个JVM进程(实际上是两个单独运行的java进程,而不是两个线程)在本地机器上运行。让我们把它们称为进程A和进程B。 我希望他们彼此通信(交换数据)(例如,ProcessA向ProcessB发送消息以执行某些操作)。 现在,我通过编写一个临时文件来解决这个问题,这些过程会定期扫描该文件以获取消息。我认为这个解决方案不太好。 什么是实现我想要的更好的选择?

  • 问题内容: 我运行基于节点映像的Docker容器(Windows的Docker快速入门终端) 我启动节点客户端(在端口3000上)和节点(基于Express)的服务器(在3009 端口上)。客户端通过AJAX调用访问REST服务器。 它可以完美地从主机运行(客户端访问localhost:3009并返回结果)。我可以拨打:3009,然后再次得到正确的结果。 但是当我构建并运行docker image

  • 我已经使用SAML扩展授权类型生成了访问令牌,如以下链接中所述: https://docs.wso2.com/display/AM180/TokenAPI#TokenAPI-交换SAML2bearer的令牌与OAuth2(SAML的扩展granttype) 步骤1:生成断言字符串。 这给了我断言字符串。我已将到期时间设置为300 (5分钟)。 步骤2:获取访问令牌使用断言字符串和(consumer