试图让docker检查State.Health给出的地图没有键入“State”的条目

我试图在容器中使用Docker HEALTHCHECK 。 我在第3版docker-compose文件中设置了这个文件,该文件也支持healthcheck :

version: '3' services: api: [...] healthcheck: test: test ! -e /unhealthy interval: 10s timeout: 1s retries: 1 

在我能find的每个地方,包括在stackoverflow上,检查一个容器的健康状况的方法是使用State.Health 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" 

我search了很长一段时间,但不能看到这些信息转移到什么地方或任何其他方式来检查健康状况。

版本信息:

 $ docker-compose --version docker-compose version 1.16.1, build 6d1ac219 $ docker --version Docker version 17.09.0-ce, build afdb6d4 

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

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

 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对象。 只有定义了healthcheck的容器才会具有.State.Health数据。

除了@马特的答案,这让我超过了没有State入境问题,我还需要删除所有现有的容器,并重build它们。 我不知道为什么,但我现在可以看到.State.Health