dpeckett / airgapify

A little tool that will construct an OCI image archive from a set of Kubernetes manifests.
GNU Affero General Public License v3.0
24 stars 1 forks source link

Unable to load images with 0.5.0 #1

Open aslafy-z opened 5 months ago

aslafy-z commented 5 months ago

Given the following manifests:

cat <<EOF | kustomize build - > manifests.yaml
kind: Kustomization
namespace: online-boutique
resources:
- https://github.com/GoogleCloudPlatform/microservices-demo//kustomize/base?ref=6af73dcf7fe1ca653d95ae7a29e12faf8cf02964
components:
- https://github.com/GoogleCloudPlatform/microservices-demo//kustomize/components/non-public-frontend?ref=6af73dcf7fe1ca653d95ae7a29e12faf8cf02964
- https://github.com/GoogleCloudPlatform/microservices-demo//kustomize/components/without-loadgenerator?ref=6af73dcf7fe1ca653d95ae7a29e12faf8cf02964
EOF

And the following airgapify run:

$ airgapify -f manifests.yaml
time=2024-06-19T15:11:54.900Z level=INFO msg="Loaded objects" count=33
time=2024-06-19T15:11:54.900Z level=INFO msg="Found image references" count=11
time=2024-06-19T15:11:54.901Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/frontend:v0.10.0
time=2024-06-19T15:11:57.384Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/emailservice:v0.10.0
time=2024-06-19T15:11:59.823Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/productcatalogservice:v0.10.0
time=2024-06-19T15:12:02.189Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/recommendationservice:v0.10.0
time=2024-06-19T15:12:05.238Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/cartservice:v0.10.0
time=2024-06-19T15:12:07.317Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/checkoutservice:v0.10.0
time=2024-06-19T15:12:09.044Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/paymentservice:v0.10.0
time=2024-06-19T15:12:11.144Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/currencyservice:v0.10.0
time=2024-06-19T15:12:12.695Z level=INFO msg="Fetching image" image=redis:alpine
time=2024-06-19T15:12:13.973Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/adservice:v0.10.0
time=2024-06-19T15:12:16.785Z level=INFO msg="Fetching image" image=gcr.io/google-samples/microservices-demo/shippingservice:v0.10.0
time=2024-06-19T15:12:18.098Z level=INFO msg="Writing image archive" path=images.tar.zst

Docker fails at loading with:

$ docker load images.tar.zst
open /var/lib/docker/tmp/docker-import-3388867272/blobs/json: no such file or directory

It works well with v0.4.0.

Docker version:

Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:28:57 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:28:57 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
aslafy-z commented 5 months ago

Oh, just seen there were a major change included with 0.5.0, from A little tool that will construct a Docker image archive from a set of Kubernetes manifests. to A little tool that will construct an OCI image archive from a set of Kubernetes manifests.. I'm looking on how to load these into docker now.

dpeckett commented 4 months ago

Thanks for the detailed bug report, sorry I didn't notice it earlier.

I did most of my testing with containerd which of course has no issues with Docker/OCI archives.

Interesting use case, loading Kubernetes images into the Docker daemon. Did you find a good solution to loading multi-image OCI archives into Docker?

I'd love to add it to the README for future reference.