Docker 检查 healthcheck 中是否存在文件

dea*_*908 5 docker docker-compose

如何等待 docker 中创建文件?我正在尝试下面的代码,但它不起作用。如果我bash -c [ -f /tmp/asdasdasd ]与 docker shell 分开执行,它会给出正确的结果。

Dockerfile测试

FROM alpine:3.6
RUN apk update && apk add bash
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '2.1'
services:
  testserv:
    build:
      context: .
      dockerfile: ./Dockerfiletest
    command:
       bash -c "rm /tmp/a && sleep 5 && touch /tmp/a && sleep 100"
    healthcheck:
      # I tried adding '&& exit 1',  '|| exit `' it doesn't work.
      test: bash -c [ -f /tmp/a ]
      timeout: 1s
      retries: 20
Run Code Online (Sandbox Code Playgroud)

docker-compose up+ 等待 10 秒 + docker ps:

: docker ps
STATUS    
Up About a minute (health: starting)
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 8

我相信您缺少运行命令的引号。bash -c只接受一个参数,而不是列表,因此您需要引用该行的其余部分以将其作为单个参数传递:

bash -c "[ -f /tmp/a ]"
Run Code Online (Sandbox Code Playgroud)

要查看健康检查的结果,您可以运行:

docker inspect $container_id -f '{{ json .State.Health.Log }}' | jq .
Run Code Online (Sandbox Code Playgroud)