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,该问题不再出现。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...