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

Docker stack doesn't update container data by tag

我正在尝试使用 docker 堆栈 设置零停机部署。我成功 运行 连接了服务器上的所有内容,但是当我尝试使用新标签更新现有堆栈时,容器中的数据没有改变。没有错误发生并且 docker 堆栈 ps 输出使用新图像的信息。尝试通过 docker 系统 p运行e 删除堆栈、容器、图像和清除缓存,但它不起作用。只有在创建具有唯一名称的新堆栈或删除 /var/lib/docker 文件夹时,我才能看到新数据。而且,如果我尝试 运行 docker 运行 的图像,将会有实际数据。 一般来说,一切看起来都好像有某种缓存 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

在 运行ner

上部署脚本
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-fpmnginx - php_files 之间创建了一个挂载卷。显然,因为服务是一个一个更新的,所以挂载的目录从来没有更新过。 通过去掉共享目录,单独上传文件到nginx,问题不再出现