问题描述
我正在尝试使用 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,该问题不再出现。