Manifest Config
According to OCI Image Manifest Specification,
the property config
is required by an image manifest.
Since oras
does not make use of the configuration object, an empty JSON object {}
is used by default when pushing, and never being fetched when pulling.
The descriptor of the default configuration object is fixed as follows.
{
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": "sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a",
"size": 2
}
Customize config
To push a file hi.txt
with the custom manifest config file config.json
, you can run:
oras push --config config.json localhost:5000/hello:latest hi.txt
The media type of the config is set to the default value application/vnd.unknown.config.v1+json
.
Similar to the file reference, it is possible to change the media type of the manifest config. To push a file hi.txt
with the custom manifest config file config.json
with the custom media type application/vnd.oras.config.v1+json
, run
oras push --config config.json:application/vnd.oras.config.v1+json localhost:5000/hello:latest hi.txt
In addition, it is possible to pass a null device /dev/null
(NUL
on Windows) to oras
for an empty config file.
oras push --config /dev/null:application/vnd.oras.config.v1+json localhost:5000/hello:latest hi.txt
Docker behaviors
The config used by oras
is not a real config.
Therefore, the pushed image cannot be recognized or pulled by docker
as expected.
In this section, docker behaviors are shown given various configs.
Empty config file
$ oras push --export-manifest /dev/null localhost:5000/hello:latest hi.txt
Uploading a948904f2f0f hi.txt
Pushed localhost:5000/hello:latest
Digest: sha256:34897815cbf060e1d11b4c2938c7476d9326269e2179aef3559ce25af11a9ced
$ docker pull localhost:5000/hello:latest
latest: Pulling from hello
a948904f2f0f: Extracting [==================================================>] 12B/12B
unexpected end of JSON input
Empty JSON object
$ cat config.json
{}
$ oras push --config config.json localhost:5000/hello:latest hi.txt
Uploading a948904f2f0f hi.txt
Pushed localhost:5000/hello:latest
Digest: sha256:44d13da4d42a20ceed7ee3411b103a6f82ef02a2eac981d5e3d799c41e3015d7
$ docker pull localhost:5000/hello:latest
latest: Pulling from hello
a948904f2f0f: Pulling fs layer
invalid rootfs in image configuration
Arbitrary OS
$ cat config.json
{
"architecture": "cloud",
"os": "oras"
}
$ oras push --config config.json localhost:5000/hello:latest hi.txt
Uploading a948904f2f0f hi.txt
Pushed localhost:5000/hello:latest
Digest: sha256:e6428c9cb88505a1859a01f4b7602bdb263d5f65399ef72d3397afd9bfb25b2c
$ docker pull localhost:5000/hello:latest
latest: Pulling from hello
a948904f2f0f: Extracting [==================================================>] 12B/12B
operating system is not supported
Arbitrary config media type
$ oras push --artifact-type application/vnd.oras.config.v1+json localhost:5000/hello:latest hi.txt
Uploading a948904f2f0f hi.txt
Pushed localhost:5000/hello:latest
Digest: sha256:5d8ea018049870aab566350660b9a003c646a7f955f9996d35cc0c71bf41b3d0
$ docker pull localhost:5000/hello:latest
Error response from daemon: Encountered remote "application/vnd.oras.config.v1+json"(unknown) when fetching
Layers are not pulled in this case. Thus it is encouraged to specify customized config media type.
Additionally, the latest version of dockerd
recognizes OCI manifests and does not verify the OCI config media type.
Push / Pull config
As mentioned in the beginning of this doc, the manifest config is not used by oras
and is not worth pulling in most scenarios.
However, it is still possible to push pullable config with the oras
CLI by leveraging Manifest Annotations.
$ cat config.json
{
"foo": "bar"
}
$ cat annotations.json
{
"$config": {
"org.opencontainers.image.title": "config.json"
}
}
$ oras push --config config.json --annotation-file annotations.json localhost:5000/hello:latest hi.txt
Uploading a948904f2f0f hi.txt
Uploading 57f840b6073c config.json
Pushed localhost:5000/hello:latest
Digest: sha256:12e3de7e4a65ffc46a6158ac2df07ecc6fd1af8b0109b4c42a90067f7e907f43
$ oras pull -a localhost:5000/hello:latest
Downloaded a948904f2f0f hi.txt
Downloaded 57f840b6073c config.json
Pulled localhost:5000/hello:latest
Digest: sha256:12e3de7e4a65ffc46a6158ac2df07ecc6fd1af8b0109b4c42a90067f7e907f43