Використання --restart=always
політики буде обробляти перезапуск існуючих контейнерів у разі перезавантаження.
Проблема полягає в тому, що якщо є кілька контейнерів з --restart=always
при запуску образу нової версії , як описано в докер - як відключити функцію автоматичного перезапуску на контейнер? .
Спроба автоматично видалити контейнер, коли він існує за допомогою put put docker run --rm
, також матиме проблеми з --restart=always
політикою, оскільки вони суперечать один одному .
$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm
Тож у цьому випадку краще вибрати інший варіант: --запустити, якщо не зупинено політику.
$ docker run --rm --restart unless-stopped <image>
Ця політика не конфліктуєdocker run --rm
, але , як описано в Докер документації :
Це аналогічно --restart=always
, за винятком того, що при зупинці контейнера (вручну чи іншим способом) він не перезапускається навіть після перезавантаження демона Docker.
Отже, використовуючи цю --restart unless-stopped
політику, щоб переконатися, що перезапуск працює у випадку випадкового припинення закриття терміналу, зробіть один раз в іншому терміналі, як показано нижче:
$ docker ps
$ docker restart <container>
Зачекайте, поки процес вбивства закінчиться в попередній оболонці, а потім закрийте її та просто залиште ( не робіть вихід ).
І перевірте ще раз, що залишився термінал, чи контейнер все ще працює:
$ docker ps
Якщо вона все ще запущена, ви можете безпечно перезавантажити і ще раз перевірити, чи програма перезапускається, і побачити, чи ваш докер чистий без невикористаних кількох контейнерів.