使用相同TAG时Docker Push无法覆盖镜像最新变更的问题
解决Docker相同TAG无法更新镜像的问题
你的构建环节已经做对了——用--no-cache确保每次都是全新构建,推送也会覆盖Docker Hub上的同TAG镜像,但问题出在部署环节的自托管 runner 本地缓存了旧镜像,导致docker-compose up -d直接用本地旧镜像,不会主动拉取你刚推送的新版本。
直接改部署步骤就能解决,给你两种靠谱的方案:
方案一:先拉取最新镜像再启动
在部署流程里,停止容器后先执行拉取命令,确保拿到最新镜像再启动:
deploy: needs: build name: Deploy runs-on: self-hosted steps: - name: ... # 保留你原有的其他步骤 - name: Stop existing containers run: docker-compose down - name: Pull latest images from Docker Hub run: docker-compose pull - name: Run container with Docker Compose run: docker-compose up -d
方案二:启动时强制拉取最新镜像
把拉取和启动合并成一步,用--pull always参数让docker-compose自动拉取最新镜像:
deploy: needs: build name: Deploy runs-on: self-hosted steps: - name: ... # 保留你原有的其他步骤 - name: Stop existing containers run: docker-compose down - name: Run container with Docker Compose (pull latest first) run: docker-compose up -d --pull always
额外说明
- 不用清理Docker Hub的旧镜像,只要部署端主动拉取,就能拿到你刚构建的最新版本。
- 确保你的
docker-compose.yml里引用的是完整的镜像名(比如${DOCKER_USERNAME}/****:client-latest),不要写死镜像ID。
内容的提问来源于stack exchange,提问作者MiguelG
相关产品推荐
相关产品推荐

