使用命令退出代码作为依赖服务的故障检测机制的Docker-Compose入口点,始终以0

时间:2018-10-09 16:10:52

标签: docker docker-compose minio

我正在使用 docker-compose 启动 minio 服务和 minio / mc 服务( createbuckets )创建默认存储桶。对于 minio 故障检测,我正在使用 mc 命令的退出代码,该命令将主机添加到配置中以进行故障检测。 docker-compose 文件在下面列出。

mc add host 命令在中失败时,我似乎无法获得 createbuckets 服务以返回除0以外的任何值的退出代码。 > entrypoint 命令字符串。谁能发现为什么发生此错误?我正在MacOS环境中运行它。我发现预期的行为几乎可以在Linux OS环境中工作。请参考下面添加的评论。

有关信息,入口点检查命令是否成功,以将minio作为主机添加到mc命令客户端配置中。我已指定 on-failure 的重新启动策略,以便在失败时发出失败退出代码1,从而重新启动 createbuckets 服务,直到它可以连接到minio。 。

version: "3"
services:
  minio:
    image: minio/minio
    ports:
      - "9000:9000"
    volumes:
      - ./docker/minio-data:/export
      - ./docker/minio-config:/root/.minio
    environment:
      - "MINIO_ACCESS_KEY=accesskey"
      - "MINIO_SECRET_KEY=secretkey"
    command: server /export
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:9000"]
        interval: 30s
        timeout: 10s
        retries: 5

  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    restart: on-failure
    entrypoint: >
        /bin/sh -c "
        mc config host add myminio http://minio:9000 accesskey secretkey;
        success=$$?;
        if [ $$success -ne 0 ]; then \
          echo error encountered;
        else \
          /usr/bin/mc rm -r --force myminio/uploads;
          /usr/bin/mc mb myminio/uploads;
          /usr/bin/mc policy download myminio/uploads; \
        fi
        echo the variable value is $$success;
        if [ $$success -ne 0 ]; then exit 1; else exit 0; fi
      "

使用netcat解决了minio的故障检测问题

基于https://stackoverflow.com/a/48215226/8325270https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html,我放弃了使用命令的 exit 状态作为连接minio的故障检测方法。这样做是为了支持 netcat 实用程序。 docker compose文件在下面列出。此外,由于在docker-compose文件规范的v3中删除了条件 depends_on ,因此我删除了 minio 服务中的 healthcheck 部分。

version: "3.4"
services:
  minio:
    image: minio/minio
  ports:
    - "9000:9000"
  volumes:
    - ./docker/minio-data:/export
    - ./docker/minio-config:/root/.minio
  environment:
    - "MINIO_ACCESS_KEY=accesskey"
    - "MINIO_SECRET_KEY=secretkey"
  command: server /export


createbuckets:
  image: minio/mc
  links:
    - minio
  restart: on-failure
  entrypoint: >
    /bin/sh -c "
      echo Waiting for minio service to start...;
      while ! nc -z minio 9000;
      do
        sleep 1;
      done;
      echo Connected!;
      mc config host add myminio http://minio:9000 accesskey secretkey;
      /usr/bin/mc rm --recursive --force myminio/uploads;
      /usr/bin/mc mb myminio/uploads;
      /usr/bin/mc policy download myminio/uploads;
      /usr/bin/mc policy upload myminio/uploads;
      exit 0;
    "

0 个答案:

没有答案