I would like to edit a docker images metadata for the following reasons:
I don't like an image parents EXPOSE, VOLUME etc declaration (see #3465, Docker-Team did not want to provide a solution), so I'd like to "un-volume" or "un-expose" the image.
I dont't like an image ContainerConfig
(see docker inspect [image]
) cause it was generated from a running container using docker commit [container]
Fix error durring docker build
or docker run
like:cannot mount volume over existing file, file exists [path]
Is there any way I can do that?
Its a bit hacky, but works:
Save the image to a tar.gz file:$ docker save [image] > [targetfile.tar.gz]
Extract the tar file to get access to the raw image data:tar -xvzf [targetfile.tar.gz]
Lookup the image metadata file in the manifest.json
file: There should be a key like .Config
which contains a [HEX]
number. There should be an exact [HEX].json
in the root of the extracted folder.
This is the file containing the image metadata. Edit as you like.
Pack the extracted files back into an new.tar.gz
-archive
Use cat [new.tar.gz] | docker load
to re-import the modified image
Use docker inspect [image]
to verify your metadata changes have been applied
EDIT: This has been wrapped into a handy script: https://github.com/gdraheim/docker-copyedit
I had come across the same workaround - since I have to edit the metadata of some images quite often (fixing an automated image rebuild from a third party), I have create a little script to help with the steps of save/unpack/edit/load.
Have a look at docker-copyedit. It can remove or overrides volumes as well as set other metadata values like entrypoint and cmd.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With