init
This commit is contained in:
commit
883f31932e
169 changed files with 5676 additions and 0 deletions
98
scripts/reproduce-containerd-referrers.sh
Normal file
98
scripts/reproduce-containerd-referrers.sh
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/sh
|
||||
# Reproduce: containerd-snapshotter pull-through mirror referrers failure
|
||||
#
|
||||
# Prerequisites: Docker Engine installed, root access
|
||||
# This script:
|
||||
# 1. Starts a pull-through registry mirror for Docker Hub
|
||||
# 2. Enables containerd-snapshotter
|
||||
# 3. Configures Docker to use the mirror via hosts.toml
|
||||
# 4. Pulls an image — fails with "failed to decode referrers index"
|
||||
#
|
||||
# Run as root.
|
||||
set -eu
|
||||
|
||||
MIRROR_PORT=5555
|
||||
MIRROR_NAME=registry-mirror-test
|
||||
|
||||
cleanup() {
|
||||
echo "==> Cleaning up"
|
||||
docker rm -f "$MIRROR_NAME" 2>/dev/null || true
|
||||
rm -rf /etc/docker/certs.d/docker.io
|
||||
rm -f /tmp/mirror-config.yml
|
||||
|
||||
# Restore daemon.json
|
||||
if [ -f /etc/docker/daemon.json.bak ]; then
|
||||
mv /etc/docker/daemon.json.bak /etc/docker/daemon.json
|
||||
else
|
||||
rm -f /etc/docker/daemon.json
|
||||
fi
|
||||
systemctl restart docker 2>/dev/null || true
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "==> Step 1: Start pull-through registry mirror"
|
||||
cat > /tmp/mirror-config.yml <<EOF
|
||||
version: 0.1
|
||||
log:
|
||||
fields:
|
||||
service: registry
|
||||
storage:
|
||||
filesystem:
|
||||
rootdirectory: /var/lib/registry
|
||||
delete:
|
||||
enabled: true
|
||||
http:
|
||||
addr: :5000
|
||||
proxy:
|
||||
remoteurl: https://registry-1.docker.io
|
||||
EOF
|
||||
|
||||
docker rm -f "$MIRROR_NAME" 2>/dev/null || true
|
||||
docker run -d \
|
||||
--name "$MIRROR_NAME" \
|
||||
-p "${MIRROR_PORT}:5000" \
|
||||
-v /tmp/mirror-config.yml:/etc/docker/registry/config.yml:ro \
|
||||
registry:2
|
||||
|
||||
echo " Waiting for mirror to start..."
|
||||
sleep 3
|
||||
|
||||
echo "==> Step 2: Enable containerd-snapshotter"
|
||||
if [ -f /etc/docker/daemon.json ]; then
|
||||
cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
|
||||
fi
|
||||
cat > /etc/docker/daemon.json <<EOF
|
||||
{
|
||||
"features": {
|
||||
"containerd-snapshotter": true
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "==> Step 3: Configure mirror via hosts.toml"
|
||||
mkdir -p /etc/docker/certs.d/docker.io
|
||||
cat > /etc/docker/certs.d/docker.io/hosts.toml <<EOF
|
||||
server = "https://docker.io"
|
||||
|
||||
[host."http://127.0.0.1:${MIRROR_PORT}"]
|
||||
capabilities = ["pull", "resolve"]
|
||||
EOF
|
||||
|
||||
echo "==> Step 4: Restart Docker"
|
||||
systemctl restart docker
|
||||
sleep 3
|
||||
|
||||
echo "==> Step 5: Remove cached image and pull through mirror"
|
||||
docker image rm alpine:latest 2>/dev/null || true
|
||||
echo " Pulling alpine:latest..."
|
||||
if docker pull alpine:latest; then
|
||||
echo " PASS: Pull succeeded (issue may be fixed)"
|
||||
else
|
||||
echo " FAIL: Pull failed with referrers error (issue reproduced)"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "==> Docker version:"
|
||||
docker version --format '{{.Server.Version}}'
|
||||
echo "==> Storage driver:"
|
||||
docker info --format '{{.Driver}}'
|
||||
Loading…
Add table
Add a link
Reference in a new issue