mirror of
https://github.com/containers/podman.git
synced 2025-05-20 16:47:39 +08:00
Add support for 'image' volume driver
We added the concept of image volumes in 2.2.0, to support inspecting an image from within a container. However, this is a strictly read-only mount, with no modification allowed. By contrast, the new `image` volume driver creates a c/storage container as its underlying storage, so we have a read/write layer. This, in and of itself, is not especially interesting, but what it will enable in the future is. If we add a new command to allow these image volumes to be committed, we can now distribute volumes - and changes to them - via a standard OCI image registry (which is rather new and quite exciting). Future work in this area: - Add support for `podman volume push` (commit volume changes and push resulting image to OCI registry). - Add support for `podman volume pull` (currently, we require that the image a volume is created from be already pulled; it would be simpler if we had a dedicated command that did the pull and made a volume from it) - Add support for scratch images (make an empty image on demand to use as the base of the volume) - Add UOR support to `podman volume push` and `podman volume pull` to enable both with non-image volume drivers Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:

committed by
Matthew Heon

parent
08993516a9
commit
fc6dcd12b3
@ -63,6 +63,15 @@ func (v *Volume) mount() error {
|
||||
return err
|
||||
}
|
||||
|
||||
v.state.MountCount++
|
||||
v.state.MountPoint = mountPoint
|
||||
return v.save()
|
||||
} else if v.config.Driver == define.VolumeDriverImage {
|
||||
mountPoint, err := v.runtime.storageService.MountContainerImage(v.config.StorageID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("mounting volume %s image failed: %w", v.Name(), err)
|
||||
}
|
||||
|
||||
v.state.MountCount++
|
||||
v.state.MountPoint = mountPoint
|
||||
return v.save()
|
||||
@ -159,6 +168,13 @@ func (v *Volume) unmount(force bool) error {
|
||||
return err
|
||||
}
|
||||
|
||||
v.state.MountPoint = ""
|
||||
return v.save()
|
||||
} else if v.config.Driver == define.VolumeDriverImage {
|
||||
if _, err := v.runtime.storageService.UnmountContainerImage(v.config.StorageID, force); err != nil {
|
||||
return fmt.Errorf("unmounting volume %s image: %w", v.Name(), err)
|
||||
}
|
||||
|
||||
v.state.MountPoint = ""
|
||||
return v.save()
|
||||
}
|
||||
|
Reference in New Issue
Block a user