使用wiremock-docker代理多个URL

时间:2017-10-13 13:55:15

标签: docker docker-compose wiremock

我有一个利用微服务的项目。我正在尝试使用wire-mock来创建测试环境。

如何使用docker-compose代理多个网址。

这是我的docker-compose文件。

networks:
    ft-simulator:
        external: false
services:
    app:
        depends_on:
        - nginx
        environment:
        - SPRING_PROFILES_ACTIVE=simulator
        - JAVA_FLAGS=-Dhttp.proxyHost=wiremock -Dhttp.proxyPort=8080
        healthcheck:
            interval: 1m
            retries: 3
            test:
            - CMD
            - curl
            - -f
            - http://localhost:8080/health
            timeout: 10s
        image: ft-simulator:latest
        ports:
          - "8080:8080"
        networks:
            ft-simulator:
                aliases:
                - bcp
    nginx:
        image: nginx
        ports:
          - "80:80"
          - "443:443"
        networks:
        - ft-simulator
    wiremock:
        image: rodolpheche/wiremock:2.8.0-alpine
        networks:
        - ft-simulator
        ports:
          - "8081:8080"
        volumes:
          - "$PWD/stubs:/home/wiremock"
        command: ["--proxy-all=http://bcp:8080, http://www.google.com"]
version: '3.1'

Google只是一个占位符,直到它启动。

当我运行docker-compose时,我收到以下错误

crp11070m:wiremock-simulation john.hamlett$ docker logs -f wiremocksimulation_wiremock_1
Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://bcp:8080, http://www.google.com
    at java.net.URI.create(URI.java:852)
    at com.github.tomakehurst.wiremock.standalone.CommandLineOptions.proxyHostHeader(CommandLineOptions.java:274)
    at com.github.tomakehurst.wiremock.core.WireMockApp.buildStubRequestHandler(WireMockApp.java:123)
    at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:72)
    at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.run(WireMockServerRunner.java:65)
    at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.main(WireMockServerRunner.java:113)
Caused by: java.net.URISyntaxException: Illegal character in authority at index 7: http://bcp:8080, http://www.google.com
    at java.net.URI$Parser.fail(URI.java:2848)
    at java.net.URI$Parser.parseAuthority(URI.java:3186)
    at java.net.URI$Parser.parseHierarchical(URI.java:3097)
    at java.net.URI$Parser.parse(URI.java:3053)
    at java.net.URI.<init>(URI.java:588)
    at java.net.URI.create(URI.java:850)
    ... 5 more

1 个答案:

答案 0 :(得分:0)

使用--proxy-all参数无法同时代理多个目标网址。

您可以做的是根据传入请求改变代理目标,方法是为每条路由创建一个带有代理响应的存根映射,例如

路线1:

{
    "request": {
        "urlPattern": "/route1/.*"
    },

    "response": {
        "proxyBaseUrl" : "http://target-host-1.com"
    }
}

路线2:

{
    "request": {
        "urlPattern": "/route2/.*"
    },

    "response": {
        "proxyBaseUrl" : "http://target-host-2.com"
    }
}

请注意,网址路径部分会添加到网址中,因此您最终会收到代理http://target-host-1.com/route1/whateverhttp://target-host-2.com/route2/whatever的请求。