Хто-небудь знає, чи є спосіб змусити докер-рій перезапустити одну службу, яка є частиною стека, без перезапуску цілого стека?
Хто-небудь знає, чи є спосіб змусити докер-рій перезапустити одну службу, яка є частиною стека, без перезапуску цілого стека?
Відповіді:
Повторна робота 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