我正在尝试在容器中使用 Docker HEALTHCHECK。我在版本 3 docker-compose 文件中进行设置,该文件也支持healthcheck:
version: '3'
services:
api:
[...]
healthcheck:
test: test ! -e /unhealthy
interval: 10s
timeout: 1s
retries: 1
Run Code Online (Sandbox Code Playgroud)
在我能找到的每个地方,包括在 stackoverflow 上,检查容器健康状况的方法是使用docker inspect并查看State.Health,但不存在这样的条目:
$ docker inspect --format='{{json .State}}' api
Template parsing error: template: :1:7: executing "" at <.State>: map has no entry for key "State"
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了很长一段时间,但看不到这些信息移动到哪里或任何其他检查健康状态的方法。
版本信息:
$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac219
$ docker --version
Docker version 17.09.0-ce, build afdb6d4
Run Code Online (Sandbox Code Playgroud) 我正在 Kotlin 中制作一个小型 Spring WebFlux 应用程序的原型。此应用程序需要从远程 REST 端点获取 tar 存档并将其存储在本地磁盘上。听起来很简单。
我首先创建了一个集成测试,该测试启动 spring 服务器和另一个 WebFlux 服务器,该服务器具有一个模拟 REST 端点,该端点为 tar 存档提供服务。
测试应该是这样的:
1)应用程序:获取 mock-server/archive
2) 模拟服务器:响应状态为 200,主体中的 tar 存档作为类型附件
3)app:阻塞直到收到所有字节,然后解压并使用文件
我遇到的问题是,当我尝试将字节收集到ByteArray应用程序的a 中时,它会永远阻塞。
我的mock-server/archive路线到以下功能:
fun serveArchive(request: ServerRequest): Mono<ServerResponse> {
val tarFile = FileSystemResource(ARCHIVE_PATH)
assert(tarFile.exists() && tarFile.isFile && tarFile.contentLength() != 0L)
return ServerResponse
.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(tarFile.contentLength())
.header("Content-Disposition", "attachment; filename=\"$ARCHIVE_FNAME\"")
.body(fromResource(tarFile))
}
Run Code Online (Sandbox Code Playgroud)
然后我的应用程序使用以下内容调用它:
private fun retrieveArchive {
client.get().uri(ARCHIVE_URL).accept(MediaType.APPLICATION_OCTET_STREAM)
.exchange()
.flatMap { response ->
storeArchive(response.bodyToMono())
}.subscribe()
}
private fun storeArchive(archive: Mono<ByteArrayResource>): Mono<Void> …Run Code Online (Sandbox Code Playgroud)