Развертывание стека докеров с помощью restart_policy throws "Ответ об ошибке от демона: недопустимый RestartCondition:" never-stop "" - PullRequest
0 голосов
/ 28 июня 2018

Когда я пытаюсь запустить это с docker stack deploy -c docker-compose.yml stack-name, я получаю ошибку: Error response from daemon: invalid RestartCondition: "unless-stopped"

Мне нужно, чтобы и суперсервис, и контейнер докера перезапустились в случае прерывания. Без restart_policy (используя только --restart unless-stopped для контейнера), если я перезагружаю свою машину, он только перезапускает контейнер, а не службу. Superservice позволяет мне использовать функции докера только для службы (такие как секреты, конфигурации, ресурсы и т. Д.). Контейнер позволяет мне использовать устройства.

Docker поддерживает политику перезапуска . Я также видел эту ветку , но я не уверен, что с этим делать, или связано ли это. Я немного Docker нуб.

Мой docker-compose.yml файл:

version: "3.2"
services:
  superservice:
    image: docker
    command: docker run -it --restart unless-stopped --device=/dev/video0 --volume=/path:/path --name container_name my/image
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      replicas: 1
      mode: replicated
      restart_policy:
        condition: unless-stopped
      resources:
        limits:
          cpus: '0.70'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
      placement:
        constraints: [node.role == manager]
    stdin_open: true
    tty: true

Docker версия 18.05.0-ce, сборка f150324

Linux raspberrypi 4.14.50-v7 + # 1122 SMP вт. 19 июня 12:26:26 BST 2018 armv7l GNU / Linux

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Если вы развертываете в виде стека, политика перезапуска не требуется, я даже видел, как она ломает вещи в экстремальных ситуациях (хосту не хватает памяти). Это связано с тем, что режим роя просматривает ваше заданное целевое состояние, сравнивает его с текущим состоянием и устраняет любые различия.

Таким образом, если ваш контейнер останавливается, режим роя воссоздает новый экземпляр независимо от политики перезапуска. Остановка контейнера вручную приведет к запуску нового экземпляра, так же, как к сбою или даже по мере обновления.

Чтобы вручную остановить контейнеры, управляемые в режиме роя, вам нужно выдвинуть новое целевое состояние, где эта служба имеет 0 реплик в качестве новой цели.

0 голосов
/ 13 мая 2019

Отвечая на мой вопрос:

Политики перезапуска не отображают 1: 1 из docker compose в docker cli.

docker-compose политики можно найти здесь

docker cli Политики можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...