2017-03-22 12 views
1

私は次のような状況があります。ドッカー作曲:モック外部サービス

私のアプリケーションは(たとえば、いくつかのSaaSサービス、ElasticSearch程度) 外部APIを呼び出して、単一のWebサービスで構成されています。ユニットテスト以外の目的のために、外部サービスを制御し、後で障害を注入する必要があります。アプリケーションと「模擬」APIがドッキングされ、 今度はすべてのコンテナを回転させるのにdocker-composeを使用したいと思います。

アプリケーションには複数のアドレスがハードコードされているため(例:外部サービスのホスト名)、私はそれらを変更できず、回避する必要があります。

serviceコンテナはhttp://external-service.com/getsomestuffを呼び出します。

ドッカーが提供するいくつかの機能を使用して、URLを変更せずに外部のhttp://external-service.com/getsomestuffの外部トラフィックを模擬コンテナに再ルーティングすることを考えました。

マイ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(それをインストールするために修正するDockerfilesを必要とする)
  • を使用して(これは私には本当に不明である)
は、

私が欲しいものを達成するための簡単なオプションはありますか?

編集

明確にするために、ここでserviceコードの関連する部分である:

import requests 

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

答えて

0

私は問題はあなたが解決しようとしているが何であるかを完全には明らかにないんだけど、コンテナ内のexternal-service.comを "モック"サービスへの直接トラフィックにする場合は、docker-compose.ymlファイルのextra_hostsディレクティブを使用して行うことができるはずです。例えば、私はこれがある場合:入った容器に/etc/hostsになります

version: "2" 

services: 
    example: 
    image: myimage 
    extra_hosts: 
     - google.com:172.23.254.1 

172.23.254.1 google.com 

をそしてhttp://google.comが172.23.254.1で私のWebサーバにヒットするアクセスしようとします。

1

Dockerは、ユーザー定義ネットワークの内部DNSサーバーを実行します。不明なホスト検索は、通常のDNSサーバーに転送されます。

バージョン2+作成ファイルは自動的に作成用のネットワークを作成し、解決するホスト名を制御するいくつかの方法があります。

最も簡単な方法は、ホスト名を使用してコンテナに名前を付けることです:あなたは、コンテナ名を維持したい場合は

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: 
関連する問題