Docker检查healthcheck中是否存在文件

时间:2018-01-20 14:23:54

标签: docker docker-compose

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

Dockerfiletest

FROM alpine:3.6
RUN apk update && apk add bash

搬运工-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

docker-compose up +等待10s + docker ps

: docker ps
STATUS    
Up About a minute (health: starting)

2 个答案:

答案 0 :(得分:2)

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

bash -c "[ -f /tmp/a ]"

要查看运行状况检查的结果,您可以运行:

docker inspect $container_id -f '{{ json .State.Health.Log }}' | jq .

答案 1 :(得分:0)

事实证明,除了缺少引号之外,我还应该通过-f检查套接字是否存在

bash -c '[ -S /tmp/uwsgi.sock ]'

此外interval: 5s可用于减少默认的5s间隔。