Suggestion: a "docker pull --dry-run" option
还没有人认领这个 Issue。
评估
调研方向
该 issue 未指定任何具体文件或测试。首先跟踪 Docker CLI 的 docker pull 命令入口点,并确定针对镜像可用性、返回状态、输出以及多平台镜像的预期 dry-run 行为。完成的标准是实现约定的行为并由测试覆盖。
由索引模型根据 Issue 内容生成。
描述
Description
It would be useful in some automation environment to detect if there are new images available without pulling them right away. In my case, the launcher script detects if there is an update, and offers it to the user.
In an ideal world, I would launch docker pull --dry-run and either parse the output or check the return code.
Migrated from this issue, as suggested in the thread to make a feature request in the Docker CLI :
https://github.com/distribution/distribution/issues/2412
Workaround:
It is possible to achieve this using image inspection. The following script works in my case but has major flaws : is is slow, will break if the manifest structure changes, and works only because the variant I use happens to be the first in the remote repo's manifest. I feel that there is nothing better that a docker pull to know what a docker pull should be doing, and any scripting attempt like this one is an approximation.
images=$(docker compose config | grep 'image:' | awk '{print $2}')
for image in $images; do
# Get the local digest in the format sha256:<hash>
localDigest=$(docker image inspect --format='{{index .Id}}' $image 2>/dev/null)
if [[ $? -ne 0 ]]; then
echo "At least one image not found locally: $image"
updatesFound=true
break
fi
echo $localDigest
# Get the remote digest in format sha256:<hash>
# This works ONLY if the desired config is from the first variant
# Would have been cleaner with jq but it is not available in a git bash on Windows...
remoteDigest=$(docker manifest inspect -v $image \
| awk '/"config":/ {found=1} found&& /"digest"/ {print $2; exit}' \
| tr -d '",')
echo $remoteDigest
# Perform comparison
if [[ "$localDigest" == "$remoteDigest" ]]; then
echo "Up to date: $image"
else
echo "At least one image outdated: $image"
updatesFound=true
break
fi
done
EDIT: Workaround does not work on a mac, as the content of docker image inspect differs.
- 主要语言
- Go
- 星标
- 6.1k
- 派生
- 2.2k
- 平均合并
- 1 天 10 小时
- 30 天内合并 PR
- 47
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
docker/cli 的其他 Issue
-
kind/bug status/0-triage
难度 2/5 1-3 小时 新手友好度 75/100
-
kind/bug status/0-triage
难度 2/5 1-3 小时 新手友好度 72/100
-
难度 2/5 1-3 小时 新手友好度 74/100
-
kind/feature status/0-triage
难度 2/5 1-3 小时 新手友好度 70/100
-
kind/bug status/0-triage
难度 2/5 1-3 小时 新手友好度 76/100
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 70/100
-
acceptance-tests phase-coding schema-coverage testing triaged
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100