Флаг restart в docker-compose

На сервере развёрнут бэк на FastAPI. В compose файле docker'а прописаны следующие флаги

version: '3'
services:
  project:
    build: .
    restart: always
    network_mode: host
    command: >
        bash -c  "uvicorn main:app"
    volumes:
    - /home/some_dir:/app

Правильно ли я понимаю, что при перезаписи main файла, весь проект сам автоматически перезапуститься?


Ответы (1 шт):

Автор решения: Roman Konoval

Нет, не перезапустится.

Параметр

restart: always

означает, что docker-compose перезапустит контейнер, если тот вдруг остановится (например, программа закончит выполнение штатно или аварийно). Эта опция нужна именно для перезапуска, если вдруг произойдет сбой, а не для развертывания новой версии.

Важно также понимать, что когда программа завершиться по какой-либо причине, то restart: always не заставит docker-compose заново делать build, т.е. не будет создаваться новый докер образ, а будет использован существующий. Если исходники приложения попадают в контейнер при сборке образа докер, то в этом случае будет использован старый образ, до изменения. Если же исходники попадают через volume, то изменения сделанные в них подхватятся.

Если же программа выполняется и не останавливается, то подмена файла ничего не даст.

→ Ссылка