使用模拟服务器端口问题模拟 3rd 方依赖

问题描述

我们有一个依赖于第 3 方 API 的应用程序,我们需要在构建过程中对其进行模拟。我们想为此使用 Mock Server,因为它使我们可以很好地控制响应。

我们使用的 API 无法覆盖 URL,因此我们需要模拟 DNS 级别的依赖关系,迫使 domain.com 解析到我们的容器。幸运的是,我们可以使用 docker 轻松完成此操作,如下面的 docker-compose.yml 文件所示。

version: "2"
services:
  mockserver:
    image: mockserver/mockserver
    ports:
        - 80:1080
  ping:
    image: busyBox
    links:
      - mockserver:domain.com
      - mockserver:api.domain.com
    command: ping domain.com
    depends_on:
      - mockserver

如果我们运行 docker-compose run ping,我们可以看到来自容器的对 domain.com 请求的响应

Creating docker-test_ping_run ... done
PING domain.com (172.22.0.2): 56 data bytes
64 bytes from 172.22.0.2: seq=0 ttl=64 time=0.081 ms
64 bytes from 172.22.0.2: seq=1 ttl=64 time=0.078 ms
64 bytes from 172.22.0.2: seq=2 ttl=64 time=0.125 ms

我们也可以访问模拟服务器的 Web UI http://localhost/mockserver/dashboard

但是,如果我尝试直接从 ping 容器内部访问模拟服务器,则它不支持端口转发。

❯ docker-compose exec ping sh
/ # wget domain.com
Connecting to domain.com (172.22.0.2:80)
wget: can't connect to remote host (172.22.0.2): Connection refused

如果我添加端口就可以了,这表明容器内不支持端口转发?

/ # wget domain.com:1080
Connecting to domain.com:1080 (172.23.0.2:1080)
saving to 'index.html'

这里缺少什么?我们需要能够让 domain.com 请求在没有端口的情况下运行,否则我们无法交换我们的依赖项。

谢谢。

解决方法

原来我只是缺少 serverPort 设置,80:80 转发使 Web 界面保持正常工作。

version: "2"
services:
    mockserver:
        image: mockserver/mockserver
        command: -serverPort 80
        ports:
            - 80:80  
    ping:
        image: busybox
        links:
            - mockserver:domain.com
            - mockserver:api.domain.com
        command: ping domain.com
        depends_on:
            - mockserver

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...