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