Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to import images from tar using stream #380

Closed
x1a0b0 opened this issue Mar 4, 2024 · 3 comments · Fixed by #411
Closed

How to import images from tar using stream #380

x1a0b0 opened this issue Mar 4, 2024 · 3 comments · Fixed by #411
Labels
enhancement New feature or request

Comments

@x1a0b0
Copy link

x1a0b0 commented Mar 4, 2024

/// let bytes = byte_stream.next().await.unwrap().unwrap();

The issue: byte_stream.next()only read the first frame(the default capacity is 8k), not the complete content for large tar file.

Think aloud, import_image use Bytes as root_fs's type, which means we should read the tar file into memory one time, If the file is several gigabytes, this will be annoying.

@fussybeaver
Copy link
Owner

Yes, I believe it's bounded by 8k due to tokio's default Framing configuration ... happy to take any PR adjustments to make this better.

Re. your second point, it got changed to Bytes because Hyper changed Body to become less dependent on Tokio. Is there an obvious streaming byte implementation to use here, one that also doesn't use Tokio ?

@x1a0b0
Copy link
Author

x1a0b0 commented Mar 4, 2024

Maybe just use http-body-util's StreamBody

@fussybeaver fussybeaver added the enhancement New feature or request label Mar 23, 2024
russelltg added a commit to russelltg/bollard that referenced this issue May 31, 2024
@bensmidt
Copy link

bensmidt commented Jun 15, 2024

Hello! I'm currently trying to use the import_image to import a docker image from a *.tar.gz file. I've been testing with the postgres image, creating a 'postgres.tar.gz' file using the docker save command provided by Docker's CLI. However, I continually receive the following error: "exit status 1: unpigz: skipping: : corrupted -- incomplete deflate data\n" despite docker load running perfectly through the CLI. I have tried with other commonly used images and receive the same error.

Am I correct in assuming that the root cause of this issue is that bytes only partially contains the full tar file as described in this issue? If so,

  1. Are there are any workarounds to this that you know of?
  2. It seems you're close to a working solution on russeltg's pull request. How close are you and do you know when this update will be generally available through the bollard crate?

fussybeaver added a commit that referenced this issue Jun 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants