Хто-небудь знає, чи є спосіб змусити докер-рій перезапустити одну службу, яка є частиною стека, без перезапуску цілого стека?
Хто-небудь знає, чи є спосіб змусити докер-рій перезапустити одну службу, яка є частиною стека, без перезапуску цілого стека?
Відповіді:
Повторна робота docker stack deployдля мене - це спосіб перейти до оновлення послуг. Як відповідь Франсуа , а також на власному досвіді, це оновлює лише послуги, які потребують оновлення.
Але іноді здається простішим при тестуванні матеріалів перезапустити лише одну службу. У моєму випадку мені довелося очистити том і оновити службу, щоб запустити її як свіжу. Я не впевнений, чи є мінус у методу, який я опишу. Я перевірив його на своєму стеку розробки, і він мені чудово працював.
Отримайте ідентифікатор служби, який ви хочете зруйнувати, а потім скористайтеся docker service update --force <id>примусовим оновленням служби, яке ефективно перерозгортає його
$ docker stack services <stack_name>
ID NAME ...
3xrdy2c7pfm3 stack-name_api ...
$ docker service update --force 3xrdy2c7pfm3
--forceПрапор змусить послугу поновлення , змушуючи його перезапустити.
Шкала до 0 і резервне копіювання:
docker service scale myservice=0
docker service scale myservice=10
Перегляд docker stackдокументації:
Розширений опис
Створіть та оновіть стек із файлу композиції або файлу мазки на рої
З цієї статті в блозі : docker stackпрацює подібним чином docker compose. Це ідемпотентно . Якщо стек вже розгорнуто, docker stack deployбуде перезапущено лише ті служби, у яких є дайджест або тег, який оновлено:
З мого досвіду, коли я знову розгортаю той самий стек із зміною однієї служби, буде перезапущено лише оновлену службу .
АЛЕ ... , схоже, є деякі обмеження щодо змін, які враховуються (деякі повідомлення про помилки з тегами зображень ), тому спробуйте і подивіться, чи працює, як очікувалося.
Ви також можете використовувати, service updateякщо хочете бути впевненими, що цільова послуга лише в тому випадку, якщо оновлена вашими змінами.
service updateдокументацію, я міг би додавати / видаляти envзмінні, щоб підробити це, якщо немає вбудованого способу.
docker stack deployне запускав службу (openldap). Не вдалося знайти файл журналу. docker-compose run <service>запустив би контейнер без проблем. Нарешті, docker service update --force <servce>зробив роботу.
Відповідно до прикладу в документації для прокатки оновлень:
Оновлення служби $ docker --image redis: 3.0.7 redis
Однак це працює, лише якщо ваше зображення вже на локальних машинах. Якщо ні, тоді вам потрібно використовувати --with-registry-auth для надсилання деталей автентифікації реєстру агентам рою. Детальніше див. У документації оновлення служби докера.
Оновлення служби $ docker --with-registry-auth --image redis: 3.0.7 redis
видали це:
docker stack rm stack_name
передислокувати його:
docker stack deploy -c docker-compose.yml stack_name