Docker堆栈不按标签更新容器数据

问题描述

我正在尝试使用 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

在运行器上部署脚本

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} && \
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 && \ # 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

感谢您的帮助!

解决方法

您将不得不使用--no-cache选项或--build选项作为up命令可用:

docker-compose up --build

这将确保从头开始构建映像,并且不使用缓存。

,

我发现了问题所在。我在 php-fpm nginx - php_files 之间创建了一个装载卷。显然,由于服务是一个接一个地更新的,因此挂载的目录从未更新过。 通过删除共享目录并将文件分别上传到nginx,该问题不再出现。