Docker-Compose Entrypoint, использующий код выхода команды в качестве механизма обнаружения сбоев для зависимой службы, всегда завершает работу с 0 - PullRequest
0 голосов
/ 09 октября 2018

Я использую docker-compose для запуска службы minio и службы minio / mc ( createbuckets ) для созданияведро по умолчанию.Для обнаружения сбоев minio я использую код завершения команды mc , которая добавляет хост в конфигурацию для обнаружения сбоев.Файл docker-compose приведен ниже.

Мне не удается заставить службу createbuckets возвращать код выхода с любым значением, отличным от 0, когда команда mc add host не выполняется в точка входа командная строка.Может кто-нибудь определить, почему эта ошибка происходит?Я запускаю это в среде MacOS.Я обнаружил, что ожидаемое поведение почти работает в среде ОС Linux.Пожалуйста, обратитесь к добавленному комментарию ниже.

Для получения информации точка входа проверяет успешность команды для добавления minio в качестве хоста в конфигурацию клиента команды mc.Я указал политику перезапуска при сбое , чтобы в случае сбоя можно было сигнализировать код выхода из ошибки 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/8325270 и https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html Я отказался от использования команды exit статус как метод обнаружения сбоев при подключении к minio.Это было сделано в пользу утилиты netcat .Составной файл Docker указан ниже.Кроме того, я удалил раздел healthcheck в службе minio , поскольку в версии 3 спецификации файла docker-compose было удалено условное depen_on .

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;
    "
...