Docker stack не обновляет данные контейнера с помощью тега

#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 и nginxphp_files. По-видимому, поскольку службы обновляются одна за другой, подключенный каталог никогда не обновлялся. При удалении общего каталога и отдельной загрузке файлов в nginx проблема больше не возникает.