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 调用来自动化它。
我的建议是将映射和响应主体都存储在文件中。
默认:
- 映射文件应包含在
mappings
文件夹中
- 正文文件应包含在
__files
文件夹中。
据我所知,wiremock 独立 java 进程执行以下操作(无论它是在主机上还是在容器中运行):
- 自动加载响应主体文件中的最新更改(来自 __files 文件夹)
- 需要
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
我创建了这个 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 调用来自动化它。
我的建议是将映射和响应主体都存储在文件中。
默认:
- 映射文件应包含在
mappings
文件夹中 - 正文文件应包含在
__files
文件夹中。
据我所知,wiremock 独立 java 进程执行以下操作(无论它是在主机上还是在容器中运行):
- 自动加载响应主体文件中的最新更改(来自 __files 文件夹)
- 需要
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