试图对待码头检查State.Health给出`map没有关键“State”的条目

时间:2017-11-22 00:31:55

标签: docker docker-compose

我正在尝试在容器中使用Docker HEALTHCHECK。我在版本3 docker-compose文件中进行设置,该文件也支持healthcheck

def gotValueEx(idsToFetch: Seq[Int]): Observable[(Int, Option[String])] = {
  Observable.from(idsToFetch).flatMap((id: Int) => fetchFromDb(id).map(doc => (id, Option(doc))).orElse((id, None)))
}

println(gotValueEx(Seq(1, 2, 3, 4, 5, 6)).toBlocking.toList)

在我能找到的每个地方,包括stackoverflow,检查容器运行状况的方法是使用version: '3' services: api: [...] healthcheck: test: test ! -e /unhealthy interval: 10s timeout: 1s retries: 1 并查看docker inspect,但不存在这样的条目:

State.Health

我用Google搜索了很长一段时间,但无法查看此信息的移动位置或检查健康状况的其他方法。

版本信息:

$ docker inspect --format='{{json .State}}' api
Template parsing error: template: :1:7: executing "" at <.State>: map has no entry for key "State"

2 个答案:

答案 0 :(得分:3)

服务名称api是一个撰写构造。 Docker无法将名称api映射到容器。我怀疑你有另一个名为api的对象docker inspect正在查找它。

撰写容器通常名为{{parent_directory}}_{{service}}_{{n}}。要找到名称,请使用:

docker-compose ps
docker ps -a --filter name=SERVICE_NAME

然后你可以对该名称使用检查

docker inspect --format='{{json .State}}' CONTAINER_ID_OR_NAME

或专门检查容器以避免非容器对象:

docker container inspect --format='{{json .State}}' CONTAINER_ID_OR_NAME

所有容器都应包含.State对象。只有定义了运行状况检查的容器才会有.State.Health数据。

答案 1 :(得分:0)

除了@Matt的回答,让我超越了no State条目问题,我还需要删除所有现有容器并重建它们。我不确定原因,但我现在可以看到.State.Health