docker - MockServer:模拟外部http/https响应会拒绝80/443上的连接

标签 docker docker-compose mockserver

我试图实现的是模拟google oauth2端点的响应。
这是我的设置:

# docker-compose.yml
version: '3.8'

services:
  busybox:
    image: yauritux/busybox-curl:latest
    command: tail -f /dev/null
    networks:
      - our-network

  api-mock:
    image: mockserver/mockserver
    networks:
      our-network:
        aliases:
          - oauth2.googleapis.com
    environment:
      MOCKSERVER_INITIALIZATION_JSON_PATH: /api-mock/expectations_init.json
      MOCKSERVER_WATCH_INITIALIZATION_JSON: 'true'
    volumes:
      - ./api-mock/:/api-mock
    ports:
      - 1080:1080

networks:
  our-network:
我们对Mockserver的期望
# ./api-mock/expectations_init.json
[
  {
    "httpRequest": {
      "method": "GET",
      "path": "/token",
      "secure": true
    },
    "httpResponse": {
      "statusCode": 200,
      "body": "Hello World - secure"
    }
  },
  {
    "httpRequest": {
      "method": "GET",
      "path": "/token",
      "secure": false
    },
    "httpResponse": {
      "statusCode": 200,
      "body": "Hello World"
    }
  }
]
我的项目结构
stackoverflow
    - ./api-mock
        - expectations_init.json
    - docker-compose.yml
要运行此最小示例,只需运行
docker-compose up -d
查看模拟服务器的仪表板
localhost:1080/mockserver/dashboard
我期望的工作是:
docker exec stackoverflow_busybox_1 curl -k https://oauth2.googleapis.com/token
# curl: (7) Failed connect to oauth2.googleapis.com:443; Connection refused
起作用的是:
docker exec stackoverflow_busybox_1 curl -k https://oauth2.googleapis.com:1080/token
# Hello World - secure
同样在这里,预计可以工作:
docker exec stackoverflow_busybox_1 curl -k http://oauth2.googleapis.com/token
# curl: (7) Failed connect to oauth2.googleapis.com:80; Connection refused
以及什么有效:
docker exec stackoverflow_busybox_1 curl -k http://oauth2.googleapis.com:1080/token
# Hello World
我错过了配置以在不通过端口的情况下获得响应的原因,因为我无法控制供应商代码正在调用的URL。我无法在模拟服务器的文档中找到有关此用例的任何提示以实现此目的。也许这是docker / docker-compose的问题?
最好的祝福

最佳答案

问题不在docker-compose中,而在模拟服务器镜像中。由于它是在没有root权限的情况下执行的,因此它无法使用端口80,但始终在端口1080上启动(有关详细信息,请单击https://www.mock-server.com/where/docker.html#run_docker_container)。
您可以使用以下方法通过启动docker镜像来更改端口:

docker run --rm --name mockserver mockserver/mockserver -serverPort 1090
这样可以使镜像在端口1090上运行(这不是您想要的),或者您可以强制容器以root用户身份运行并将端口更改为80。
docker run --user root --rm --name mockserver mockserver/mockserver -serverPort 80
无论如何,可能有充分的理由不为此使用root。我从未使用过该软件,所以我不能说真的。
然后,您可以轻松地以docker-compose格式移植命令

关于docker - MockServer:模拟外部http/https响应会拒绝80/443上的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64169990/

相关文章:

security - 运行 Docker 时存在哪些安全问题?

Java org.mockserver 从文件加载响应主体

jackson - MockServer:解析 JSON 时出现 IllegalArgumentException

php - 无法在 Joomla docker 官方容器中更改 PHP 变量

docker - 如何在Windows docker上的jenkins中预安装插件?

python - docker容器连接本地postgresql

python - Docker容器运行失败,错误: python3: can't open file 'flask run --host=0.0.0.0' : [Errno 2] No such file or directory

java - 容器之间的连接问题(我想......)

Docker-compose 复制配置

json - MockServer 和 OkHttp : body type missmatch (json vs string)