【问题标题】:docker-compose api call from one container to another in the same network在同一网络中从一个容器到另一个容器的 docker-compose api 调用
【发布时间】:2021-02-27 23:29:23
【问题描述】:

我有 2 个不同的组件/图像和以下 docker-compose 文件。

version: '3'
services:
    my_service:
        image: my_service:latest
        restart: always
        environment:
            - DUMMY=dummy
        ports:
            - "8071:8071"
        command: ""
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/bin ]"]
            interval: 30s
            timeout: 30s
            retries: 3
        container_name: my-service-container
        networks:
            - my_net

    my_ui:
        image: my_ui:latest
        depends_on:
            - my_service
        restart: always
        ports:
            - "8080:8080"
        command: ""
        networks:
            - my_net
networks:
    my_net:
        driver: bridge

“my_ui”组件是一个从“my_service”组件调用服务的ui(角度代码)。 当我使用“真实”主机名(所有部署都在那里的服务器)调用它时,它可以工作,即

例如

主机名(Linux):real.host.name

Docker 已在上述主机上安装并运行。我在上面的主机上运行了 docker-compose up,所以我的捐赠者已经启动并运行了。

从另一台机器或主机我通过邮递员调用以下命令,它可以工作。

(POST 请求,具有所需的原始正文等)。

http://real.host.name:8071/api/auth/login 

上述调用有效。但是,我想对此类调用使用 docker 服务名称,以便顺利部署到多个主机/环境。

当我尝试以下方法时,它不起作用:

http://my_service:8071/api/auth/login

失败了

Failed to load resource: net::ERR_NAME_NOT_RESOLVED

当我转到“my_ui”时

docker exec -it rm <container name of my_ui> /bin/bash

$ ping my_service

以上工作正常,即 ping 很好。但是,当我发出 http 请求时,它无法识别“my_service”主机。

有人可以帮忙吗?

【问题讨论】:

  • 实际应用程序在哪里运行?如果它类似于来自浏览器的fetch 或 XHR 调用,那是在 Docker 之外,它不能使用 Docker 内部的服务名称。在这种情况下,real.host.name 和已发布的ports: 是正确的方法。

标签: docker rest docker-compose


【解决方案1】:

我认为使用桥接模式时服务名称解析纯粹是内部的,这就是为什么您可以使用容器名称 ping 服务但在从主机 ping 时无法获得 ICMP 回复的原因。

因此 my_ui 容器能够从 Docker 桥接网络向 my_service 容器发出请求,但不能从主机发出请求(至少不能通过服务名称解析)。

如果您担心无论是否来自不同的主机,您都希望能够使用相同的服务,我建议在此类用例中使用 Swarm 模式下的 Docker。这样,您将能够基于端口而不是服务名称来使用相同的服务。

我去年写了一个关于 Docker Swarm 的分步指南,如果有任何兴趣的话 :) https://pat-laboratory.com/2020/11/03/docker-swarm-introduction-workshop/

让我知道这是否有任何帮助,或者我是否完全错过了您的问题!

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 2016-06-20
    • 2021-03-04
    • 2021-12-08
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多