如何强制Docker Compose使用镜像的特定提交哈希值?
强制Docker Compose使用特定版本镜像的解决方案
核心问题澄清
你混淆了GitHub仓库的提交哈希和Docker镜像的Digest哈希:仓库提交哈希对应代码版本,而镜像Digest是镜像本身的唯一标识,直接用仓库提交哈希作为镜像标识是无效的,这是导致问题的核心原因。
解决步骤
1. 获取目标提交对应的镜像Digest
首先拉取对应提交版本的镜像(该项目支持用提交哈希作为镜像标签):
docker pull ghcr.io/automatic1111/stable-diffusion-webui:1e0561c5cb6eba1e379f4c91648a2df8297059cc
拉取完成后,执行以下命令获取该镜像的唯一Digest(格式为sha256:xxxx):
docker inspect --format='{{.RepoDigests}}' ghcr.io/automatic1111/stable-diffusion-webui:1e0561c5cb6eba1e379f4c91648a2df8297059cc
2. 修正Docker Compose配置
在docker-compose.yml中,将服务的image字段改为镜像地址+Digest的格式,确保完全锁定镜像版本。示例配置:
services: stable-diffusion-webui: image: ghcr.io/automatic1111/stable-diffusion-webui@sha256:替换为上一步获取的Digest值 profiles: ["auto"] # 移除或注释掉build字段(如果存在),避免触发本地构建覆盖镜像 # build: ./path-to-build-context # 其他服务配置...
3. 清理缓存并重新部署
Docker会优先使用本地缓存的镜像,需要先清理可能冲突的缓存:
# 停止并移除当前容器 docker compose --profile auto down # 删除本地的latest版本镜像(避免被自动拉取) docker rmi ghcr.io/automatic1111/stable-diffusion-webui:latest # 启动服务(无需--build,因为我们直接使用现成镜像) docker compose --profile auto up -d
关键注意事项
- 如果你的
docker-compose.yml中包含build字段,执行up --build时会优先触发本地构建,完全忽略你指定的镜像。必须移除或注释build相关配置才能使用指定镜像。 - 镜像Digest是不可变的,相比标签(如
latest)能100%确保使用特定版本,不会被远程仓库的更新覆盖。
内容的提问来源于stack exchange,提问作者kafka
相关产品推荐
相关产品推荐

