gpt4 book ai didi

networking - docker 撰写 : Mock external services

转载 作者:行者123 更新时间:2023-12-03 22:32:36 24 4
gpt4 key购买 nike

我有以下情况:

我的应用程序由一个调用
外部 API(例如,一些 SaaS 服务、ElasticSearch 等)。出于非单元测试的目的,我们希望控制外部服务,然后还要注入(inject)故障。应用程序和“模拟”API 是 dockerized 和
现在我想使用 docker-compose旋转所有容器。

因为应用程序有几个硬编码的地址(例如外部服务的主机名),我无法更改它们并且需要解决。
service容器调用 http://external-service.com/getsomestuff .

我的想法是使用 docker 提供的一些功能将所有传出流量重新路由到外部 http://external-service.com/getsomestuff到模拟容器而不更改 URL。

我的 docker-compose.yaml好像:

version: '2'
services:
service:
build: ./service
container_name: my-service1
ports:
- "5000:5000"
command: /bin/sh -c "python3 app.py"

api:
build: ./api-mock
container_name: my-api-mock
ports:
- "5001:5000"
command: /bin/sh -c "python3 app.py"

最后,我有一个驱动程序,它只执行以下操作:
curl -XGET localhost:5000/
curl -XPUT localhost:5001/configure?delay=10
curl -XGET localhost:5000/

第二个 curl只需将模拟中的延迟设置为 10 秒。

我考虑过几种选择:
  • 使用 iptables -fu(需要修改 Dockerfile 来安装它)
  • 使用 docker 网络(我真的不清楚)

  • 有什么简单的选择可以实现我想要的吗?

    编辑:

    为清楚起见,这里是 service 的相关部分代码:
    import requests

    @app.route('/')
    def do_stuff():
    r = requests.get('http://external-service.com/getsomestuff')
    return process_api_response(r.text())

    最佳答案

    Docker 为用户定义的网络运行一个内部 DNS 服务器。任何未知的主机查找都将转发到您的普通 DNS 服务器。

    版本 2+ compose 文件将自动创建一个网络供 compose 使用,因此有多种方法可以控制它解析的主机名。

    最简单的方法是使用主机名命名容器:

    version: "2"
    services:
    external-service.com:
    image: busybox
    command: sleep 100
    ping:
    image: busybox
    command: ping external-service.com
    depends_on:
    - external-service.com

    如果要保留容器名称,可以使用 links
    version: "2"
    services:
    api:
    image: busybox
    command: sleep 100
    ping:
    image: busybox
    links:
    - api:external-service.com
    command: ping external-service.com
    depends_on:
    - api

    或网 aliases
    version: "2"
    services:
    api:
    image: busybox
    command: sleep 100
    networks:
    pingnet:
    aliases:
    - external-service.com
    ping:
    image: busybox
    command: ping external-service.com
    depends_on:
    - api
    networks:
    - pingnet
    networks:
    pingnet:

    关于networking - docker 撰写 : Mock external services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964666/

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