Docker 带有 Wiremock 的容器不会刷新卷的更改

Docker Container with Wiremock does not refresh changes from volume

我创建了这个 Dockerfile 并将其复制到 /my/project/wiremock 目录,基于 https://github.com/rodolpheche/wiremock-docker:[=17= 中的示例]

    FROM openjdk:8-jre-alpine

    ENV WIREMOCK_VERSION 2.27.1

    RUN apk add --update openssl

    # fix "No Server ALPNProcessors" when using https
    RUN apk add --update libc6-compat
    RUN ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2

    # grab su-exec for easy step-down from root
    # and bash
    RUN apk add --no-cache 'su-exec>=0.2' bash

    # grab wiremock standalone jar
    RUN mkdir -p /var/wiremock/lib/ \
      && wget https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-jre8- 
    standalone/$WIREMOCK_VERSION/wiremock-jre8-standalone-$WIREMOCK_VERSION.jar \
    -O /var/wiremock/lib/wiremock-jre8-standalone.jar

    WORKDIR /home/wiremock

    EXPOSE 7070 7443

    CMD java $JAVA_OPTS -cp /var/wiremock/lib/*:/var/wiremock/extensions/* 
    com.github.tomakehurst.wiremock.standalone.WireMockServerRunner

然后我在 /my/project/ 目录

中创建了以下 docker-compose.yml 文件
    version: '3'

    services:
      wiremock:
        image: rodolpheche/wiremock:latest
        container_name: miplata-wiremock-local
        build: ./wiremock/.
        ports:
          - "7070:8080"
          - "7443:8443"
        volumes:
          - ./wiremock/stubs:/home/wiremock

/my/project/wiremock/stubs 中的子目录是 mappings__files.

当我执行 docker-compose up 时,docker 容器工作,我可以发出一些工作正常的请求。但我的问题是,stubs 目录中的更改不会自动刷新,然后每次创建新的 wiremock 存根或更新现有存根时我都需要重新启动容器。

你知道我做错了什么吗?如果不重启容器继续工作就好了。

谢谢!!!!

存根目录内容的更改不会real-time在 WireMock 应用程序中刷新。可以使用 Swagger UI: http://localhost:8080/__admin/swagger-ui 手动重置它或相应的 API 调用来自动化它。

我的建议是将映射和响应主体都存储在文件中。

默认:

  1. 映射文件应包含在 mappings 文件夹中
  2. 正文文件应包含在 __files 文件夹中。

据我所知,wiremock 独立 java 进程执行以下操作(无论它是在主机上还是在容器中运行):

  1. 自动加载响应主体文件中的最新更改(来自 __files 文件夹)
  2. 需要 POST 调用 __admin/mappings/reset 才能重新加载映射。对于问题描述中的示例,cURL 命令看起来 喜欢 curl -X POST http://localhost:7070/__admin/mappings/reset

请参阅下面的映射和响应正文文件:

  • mappings/hello.json
{
  "request": {
    "method": "GET",
    "url": "/hello"
  },
  "response": {
    "status": 200,
    "bodyFileName": "hello.json"
  }
}

  • __files/hello.json
{
  "message": "Hello World !"
}

对我来说,这一切就像一个魅力。 Wiremock 是一款了不起的软件,对于使用不同用例的存根测试端点非常有用。

我认为包含 json 文件的路径应该映射到 docker 实例中的 /home/wiremock/mappings

    version: '3'

    services:
      wiremock:
        image: rodolpheche/wiremock:latest
        container_name: miplata-wiremock-local
        build: ./wiremock/.
        ports:
          - "7070:8080"
          - "7443:8443"
        volumes:
          - /path/to/json_files:/home/wiremock/mappings

如果您是 运行 作为 docker 实例,则命令应如下所示:

# json mapping files
# mappings-checkin-mode.json mappings-kiosk-mode.json
docker run -it --rm -v $PWD:/home/wiremock/mappings -p 5050:8080 --name wiremock wiremock/wiremock:2.32.0 --enable-stub-cors