gpt4 book ai didi

docker - 如何访问在另一个撰写文件中声明的服务?

转载 作者:行者123 更新时间:2023-12-02 18:21:07 25 4
gpt4 key购买 nike

我有 2 个 docker compose 文件:

第一的:

version: '3'
services:
service1:
ports:
- "8081:8080"
...

第二:
version: '3'
services:
service2:
ports:
- "8088:8088"

来自 service2我尝试向 server1 执行 http 请求:
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://service1:8081/api/v1/test/": service1; nested exception is java.net.UnknownHostException:service1] with root cause
router |
router | java.net.UnknownHostException: resource.mng
router | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_171]
router | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_171]

我该如何解决?

最佳答案

  • 如果外部网络不存在,则创建一个外部网络 -
    $ docker network create service || true
  • 定义外部网络以编写文件(第一个和第二个) -
    .........
    ports:
    - "8088:8088"
    networks:
    - service

    networks:
    service:
    external: true
  • 做一个up -d & 现在您应该可以访问名为 service1 的 service1 容器了来自 service2 容器。

  • 同样,您也可以使用由 compose 创建的默认网络,但它会将您当前的目录名称添加到定义的网络名称的前缀。您也可以使用主机网络模式,但不建议这样做。

    更新 1 -
  • docker compose 创建一个带有前缀目录名称的默认网络。
    https://docs.docker.com/compose/networking/
  • 最近在 docker compsoe 3.5 中,他们推出了自定义名称功能。因此,如果您可以使用 compose 3.5,您可以选择为您的 docker compose 网络提供自定义名称。 Compose 将创建一个新网络以防它不存在。( 首选 )
    https://docs.docker.com/compose/compose-file/#name-1

  • 您可以根据您的要求接听电话。如果你在 shell 上,你可以做下面的 shell 技巧,让 compose 只有在它不存在时才创建一个网络,如果预先创建,则忽略它。 $ docker network create service || true

    关于docker - 如何访问在另一个撰写文件中声明的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642023/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com