#docker #docker-swarm #docker-swarm-mode #docker-stack
#docker #docker-swarm #docker-swarm-mode #docker-stack
Вопрос:
Я пытаюсь настроить развертывание с нулевым временем простоя с помощью docker stack. Мне удалось запустить все на сервере, но когда я пытаюсь обновить существующий стек новым тегом, данные в контейнере не меняются. Ошибок не возникает, и docker stack ps выводит информацию о том, что используются новые изображения. Попытался удалить стек, контейнер, изображение и очистить кеш с помощью docker system prune, но это не работает. Я могу видеть новые данные только при создании нового стека с уникальным именем или удалении папки /var/ lib / docker. А также, если я попытаюсь запустить изображение с помощью docker run, будут фактические данные. В общем, все выглядит так, как будто для стека docker есть какой-то кэш, но я не знаю, где он…
docker-compose.deploy.yml
version: '3.7'
...
php-fpm:
image: registry.com/web/idm/php-fpm:${IMAGES_TAG}
depends_on:
- database
- redis
deploy:
update_config:
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
volumes:
- php_files:/var/www
networks:
- acs_back
Развертывание скрипта в runner
env $( cat .env | grep ^[A-Z] | xargs) IMAGES_TAG=${CI_PIPELINE_ID} docker-compose build --pull
IMAGES_TAG=${CI_PIPELINE_ID} docker-compose push
Развертывание скрипта на сервере
docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} amp;amp;
env $(cat $DEPLOY_PATH/env.file | grep ^[A-Z] | xargs) IMAGES_TAG=${CI_PIPELINE_ID} docker-compose -f $ACTUAL_PATH/docker-compose.deploy.yml pull amp;amp; # Without it sometimes throw errors "unable find image..."
env $(cat $DEPLOY_PATH/env.file | grep ^[A-Z] | xargs) IMAGES_TAG=${CI_PIPELINE_ID} docker stack deploy -c $ACTUAL_PATH/docker-compose.deploy.yml access-control --with-registry-auth
Спасибо за вашу помощь!
Ответ №1:
Вам нужно будет использовать опцию —no-cache или —build как доступные для команды up:
docker-compose up --build
это гарантирует, что изображение создается с нуля, а кэш не используется.
Комментарии:
1. Спасибо за ответ! Изображение содержит обновленные данные на 100%, docker-compose up -build не будет иметь смысла. Проблема где-то на уровне стека docker.
Ответ №2:
Я выяснил, в чем проблема. Я создал том для монтирования между php-fpm и nginx — php_files. По-видимому, поскольку службы обновляются одна за другой, подключенный каталог никогда не обновлялся. При удалении общего каталога и отдельной загрузке файлов в nginx проблема больше не возникает.