【发布时间】:2020-10-04 16:57:18
【问题描述】:
我正在尝试使用 docker stack 设置零停机时间部署。我成功地在服务器上运行了所有东西,但是当我尝试使用新标签更新现有堆栈时,容器中的数据不会改变。没有错误发生并且 docker stack ps 输出使用新图像的信息。尝试通过 docker system prune 删除堆栈、容器、图像和清除缓存,但它不起作用。只有在创建具有唯一名称的新堆栈或删除 /var/lib/docker 文件夹时,我才能看到新数据。而且,如果我尝试通过 docker run 运行图像,将会有实际数据。 一般来说,一切看起来都好像有某种 docker stack 的缓存,但我不知道它在哪里......
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
感谢您的帮助!
【问题讨论】:
标签: docker docker-swarm docker-swarm-mode docker-stack