1
0
mirror of https://github.com/regclient/regclient.git synced 2025-04-18 22:44:00 +03:00

Adding logging and docs

This commit is contained in:
Brandon Mitchell 2020-09-26 21:09:36 -04:00
parent 9a7c22e943
commit 46979df03c
5 changed files with 579 additions and 84 deletions

103
README.md
View File

@ -3,19 +3,33 @@
Client interface for the registry API.
This includes `regctl` for a command line interface to manage registries.
**This project is in early development, some features are not complete.**
![regctl demo](docs/demo.gif)
## regctl Features
- Ability to inspect repo tags, manifests, and image configs without
downloading the full image.
- Ability to inspect repo tags, manifests, and image configs without downloading
the full image.
- Ability to copy or retag an image without pulling it into docker. Layers are
only pulled if you are copying between different registries and the target
registry does not have the layers already.
- Ability to export an image from a registry without a docker engine.
- Ability to delete an image manifest.
- Ability to delete a tag without removing the entire manifest.
- Uses docker registry logins and /etc/docker/certs.d by default to support
private repositories and self signed registries.
## Development Status
This project is in active development, a few features are not complete.
Unfinished or not yet started work includes:
- Ability to import images from a tar to a registry.
- Ability to export a multi-platform image.
- Ability to concurrently download layers.
- Ability to retry from a partial layer download.
- Documentation.
- Testing.
## Building
```shell
@ -59,77 +73,30 @@ chmod 755 regctl
./regctl --help
```
## Demo
## Usage
```shell
$ ./regctl repo ls ubuntu | grep 20.10
library/ubuntu:20.10
$ ./regctl image manifest ubuntu:20.10
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1152,
"digest": "sha256:bb03a3e24da9704fc94ff11adbbfd9c93bb84bfab6fd57c9bab3168431a1d1ff",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1152,
"digest": "sha256:eb1e82d1e85283abb47d328cb838e8adff126ec4f44398a0e4b7f66dbad3fcb3",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v7"
}
},
...
$ ./regctl image inspect ubuntu:20.10@sha256:bb03a3e24da9704fc94ff11adbbfd9c93bb84bfab6fd57c9bab3168431a1d1ff
{
"created": "2020-08-19T21:15:25.559275011Z",
"architecture": "amd64",
"os": "linux",
"config": {
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
]
},
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:327d7aa9de643a7e07b8a258fce4f0103a1a997112abd9ca13ce42c326aae474",
"sha256:08b4849c15c3c5a7feaaf7bbe5cc7e82a83e6411b2aaf491884dc7f036b070af",
"sha256:a1beb1d2d31d68cb8987e38c8170a615968d7ba46c0c6b311d36e2891f849b70",
"sha256:b351340d34bcaf409df1cffdda8172a2a296635d16ba1ca74e1cd27cbfcf8d2b"
]
},
"history": [
{
"created": "2020-08-19T21:15:22.638202373Z",
"created_by": "/bin/sh -c #(nop) ADD file:53ca8a3f446b0751019d522066ce844f6281ffb5b15e9605cd8940176abf4c76 in / "
},
...
```
See the [project documentation](docs/README.md).
## Comparison to Other Tools
Registry client API:
- containerd: containerd'd registry APIs focus more on pulling images than on a general purpose registry client API. This means various registry API calls are not provided.
- docker/distribution: Docker's client libraries would have needed a fair bit of modification to support OCI images, and behave similar to the docker command line with registry logins.
- containerd: containerd'd registry APIs focus more on pulling images than on a
general purpose registry client API. This means various registry API calls are
not provided.
- docker/distribution: Docker's client libraries would have needed a fair bit of
modification to support OCI images, and behave similar to the docker command
line with registry logins.
There are also a variety of registry command line tools available:
- genuinetools/img: img works on top of buildkit for image creation and management. Using this for a registry client means including lots of dependencies that many will not need.
- genuinetools/reg: reg is probably the closest match to this project. Some features included in regctl that aren't included in reg are the ability to inject self signed certs, store login credentials separate from docker, copy or retag images, and export images into a tar file.
- containers/skopeo: Because of RedHat's push to remove any docker solutions from their stack, their skopeo project wasn't considered when searching for a complement to the docker command line.
- genuinetools/img: img works on top of buildkit for image creation and
management. Using this for a registry client means including lots of
dependencies that many will not need.
- genuinetools/reg: reg is probably the closest match to this project. Some
features included in regctl that aren't included in reg are the ability to
inject self signed certs, store login credentials separate from docker, copy
or retag images, and export images into a tar file.
- containers/skopeo: Because of RedHat's push to remove any docker solutions
from their stack, their skopeo project wasn't considered when searching for a
complement to the docker command line.

View File

@ -61,20 +61,31 @@ but may have unexpected results when pushing changes to the registry since each
http request will be sent to the first server in the list that is currently
available.
### Repository commands
Currently the only repository command is to list tags:
### Tag commands
```text
Usage:
regctl tag [command]
Available Commands:
delete delete a tag in a repo
ls list tags in a repo
```
The `ls` command lists all tags within a repo.
The `delete` command will delete a single tag without impacting other tags or
the underlying manifest which is useful if you are unsure if your image is used
elsewhere and want to rely on the registry to cleanup untagged manifests.
### Image Commands
The image commands are where most of the power of `regctl` is visible:
```text
Usage:
regctl image [command]
Available Commands:
copy copy or retag image
delete delete image
@ -85,42 +96,100 @@ Available Commands:
manifest show manifest or manifest list
```
The copy command allows images to be copied between registries, between
The `copy` command allows images to be copied between registries, between
repositories on the same registry, or retag an image within the same repository,
and only pulls the layers when needed (typically not needed with the same
registry server).
The digest command is useful to pin the image used within your deployment to an
The `delete` command removes the image manifest from the server. This will
impact all tags pointing to the same manifest and requires a digest to be
included in the image reference to be deleted (e.g. `myimage@sha256:abcd...`).
The `digest` command is useful to pin the image used within your deployment to an
immutable sha256 checksum.
The export/import commands allow you to copy images between registry servers
The `export`/import commands allow you to copy images between registry servers
that may be disconnected, or to export an image directly from a registry without
a docker engine and loading it into a potentially disconnected docker host.
The inspect command pulls the image config json blob. This is the same json
The `inspect` command pulls the image config json blob. This is the same json
shown with a `docker image inspect` command, and includes labels, the
entrypoint/cmd, and layer history. This can be useful with image pruning
scripts, or other tools that need the image labels without the need to pull all
of the layers.
The manifest command shows the low level layers and digests that can be pulled
The `manifest` command shows the low level layers and digests that can be pulled
from the registry to retrieve individual components of an image. This is also
useful for analyzing multi-platform manifest lists to see what platforms are
available for a particular image.
### Layer Commands
The layer command acts on blobs within the registry. These blobs include the tar
layers and the json image configs.
```text
Usage:
regctl layer [command]
Available Commands:
pull download a layer/blob
```
The `pull` command will pull a specific sha256 blob from the registry and
returns it to stdout. If you are requesting a tar layer, be sure to direct this
to a file. For json blobs, it's useful to redirect this to a command like `jq`.
Example usage:
```shell
$ regctl image manifest busybox
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1493,
"digest": "sha256:6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 764618,
"digest": "sha256:df8698476c65c2ee7ca0e9dbc2b1c8b1c91bce555819a9aaab724ac64241ba67"
}
]
}
$ regctl layer pull busybox sha256:6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3 | jq .
{
"architecture": "amd64",
"config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
...
```
### Format Flag
The format flag allows you to apply a Go template to the output of some
The `--format` flag allows you to apply a Go template to the output of some
commands. The following functions have been added in addition to the defaults
available with Go:
- json: output the variable with json formatting
- jsonPretty: same as json with linefeeds and indentation
- split: split a string based on a separator
- join: append array entries into a string with a separator
- title: makes the first letter of each word uppercase
- lower: converts a string to lowercase
- upper: converts a string to uppercase
- `json`: output the variable with json formatting
- `jsonPretty`: same as json with linefeeds and indentation
- `split`: split a string based on a separator
- `join`: append array entries into a string with a separator
- `title`: makes the first letter of each word uppercase
- `lower`: converts a string to lowercase
- `upper`: converts a string to uppercase
For more details, see:

451
docs/demo.cast Normal file
View File

@ -0,0 +1,451 @@
{"version": 2, "width": 100, "height": 26, "timestamp": 1601150708, "idle_time_limit": 3.0, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}}
[0.003758, "o", "\u001b[?1049h\u001b[22;0;0t\u001b[?1h\u001b=\u001b[H\u001b[2J\u001b[?12l\u001b[?25h\u001b[?1000l\u001b[?1002l\u001b[?1006l\u001b[?1005l\u001b[c\u001b(B\u001b[m\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[?1003l\u001b[?1006l\u001b[?2004l\u001b[1;1H\u001b[1;26r\u001b]112\u0007\u001b[1;3H"]
[0.004057, "o", "\u001b[?25l\u001b[H$\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[1;3H\u001b[?12l\u001b[?25h\u001b(B\u001b[m\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[?1003l\u001b[?1006l\u001b[?2004l\u001b[1;1H\u001b[1;26r\u001b[1;3H\u001b[?25l\u001b[H$\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[1;3H\u001b[?12l\u001b[?25h"]
[0.925083, "o", "r"]
[1.028811, "o", "e"]
[1.325271, "o", "g"]
[1.725185, "o", "c"]
[1.988959, "o", "t"]
[2.108608, "o", "l"]
[2.236552, "o", " "]
[2.676817, "o", "-"]
[2.805108, "o", "-"]
[3.045032, "o", "h"]
[3.245259, "o", "e"]
[3.380698, "o", "l"]
[3.524809, "o", "p"]
[3.916712, "o", "\r\n"]
[3.931324, "o", "Utility for accessing docker registries\r\nMore details at https://github.com/regclient/regclient\u001b[5;1H"]
[3.933591, "o", "Usage:\r\n regctl <cmd> [flags]\r\n regctl [command]\u001b[9;1HAvailable Commands:\r\n help Help about any command\r\n image manage images\r\n layer manage image layers/blobs\r\n registry manage registries\r\n tag manage tags\u001b[16;1HFlags:\r\n -h, --help help for regctl\r\n -v, --verbosity string Log level (debug, info, warn, error, fatal, panic) (default \"warning\")\u001b[20;1HUse \"regctl [command] --help\" for more information about a command.\r\n"]
[3.935331, "o", "$ "]
[4.948979, "o", "r"]
[5.06882, "o", "e"]
[5.332836, "o", "g"]
[5.724878, "o", "c"]
[6.02902, "o", "t"]
[6.188578, "o", "l"]
[6.340807, "o", " "]
[6.786803, "o", "r"]
[6.889839, "o", "e"]
[7.101056, "o", "g"]
[7.365065, "o", "i"]
[7.476891, "o", "s"]
[7.533488, "o", "t"]
[7.722821, "o", "r"]
[7.829532, "o", "y"]
[7.956649, "o", " "]
[8.172884, "o", "s"]
[8.261412, "o", "e"]
[8.348708, "o", "t"]
[8.500825, "o", " "]
[8.677082, "o", "l"]
[8.869222, "o", "o"]
[8.933465, "o", "c"]
[9.021024, "o", "a"]
[9.148644, "o", "l"]
[9.348873, "o", "h"]
[9.460883, "o", "o"]
[9.532524, "o", "s"]
[9.692995, "o", "t"]
[9.996854, "o", ":"]
[10.301037, "o", "5"]
[10.637177, "o", "0"]
[10.813328, "o", "0"]
[10.970687, "o", "0"]
[11.348843, "o", " "]
[11.693115, "o", "-"]
[11.82897, "o", "-"]
[11.972746, "o", "t"]
[12.116854, "o", "l"]
[12.260928, "o", "s"]
[12.588878, "o", " "]
[12.772578, "o", "d"]
[12.893087, "o", "i"]
[12.972879, "o", "s"]
[13.196946, "o", "a"]
[13.420946, "o", "b"]
[13.508911, "o", "l"]
[13.628965, "o", "e"]
[13.837021, "o", "d"]
[14.26879, "o", "\r\n"]
[14.282085, "o", "$ "]
[14.82897, "o", "r"]
[14.965032, "o", "e"]
[15.220958, "o", "g"]
[15.789048, "o", "c"]
[16.021044, "o", "t"]
[16.172801, "o", "l"]
[16.317057, "o", " "]
[16.572968, "o", "i"]
[16.756943, "o", "m"]
[16.844842, "o", "a"]
[16.916945, "o", "g"]
[17.0211, "o", "e"]
[17.156755, "o", " "]
[17.365147, "o", "m"]
[17.476834, "o", "a"]
[17.604972, "o", "n"]
[17.828924, "o", "i"]
[18.093299, "o", "f"]
[18.292884, "o", "e"]
[18.38096, "o", "s"]
[18.492929, "o", "t"]
[18.625759, "o", " "]
[18.852715, "o", "b"]
[18.940755, "o", "u"]
[19.076692, "o", "s"]
[19.164666, "o", "y"]
[19.373008, "o", "b"]
[19.468738, "o", "o"]
[19.612711, "o", "x"]
[20.116802, "o", "\r\n"]
[20.512948, "o", "\u001b[1;25r\u001b[14S\u001b[9d{\r\n \"schemaVersion\": 2,\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"config\": {\r\n \"mediaType\": \"application/vnd.docker.container.image.v1+json\",\r\n \"size\": 1493,\r\n \"digest\": \"sha256:6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3\"\r\n },\r\n \"layers\": [\r\n {\r\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\r\n \"size\": 764618,\r\n \"digest\": \"sha256:df8698476c65c2ee7ca0e9dbc2b1c8b1c91bce555819a9aaab724ac64241ba67\"\r\n }\r\n ]\r\n}\u001b[?25l\u001b[1;26r\u001b[26;1H\u001b[30m\u001b[42m[preso] 0:regctl* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[25;1H\u001b[?12l\u001b[?25h"]
[20.51435, "o", "$ "]
[21.229782, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[25;3H\u001b[?12l\u001b[?25h"]
[21.230211, "o", "r"]
[21.349085, "o", "e"]
[21.581048, "o", "g"]
[21.981058, "o", "c"]
[22.22093, "o", "t"]
[22.356983, "o", "l"]
[22.45275, "o", " "]
[22.717164, "o", "i"]
[22.916667, "o", "m"]
[23.028878, "o", "a"]
[23.08574, "o", "g"]
[23.185609, "o", "e"]
[23.380804, "o", " "]
[23.620644, "o", "i"]
[23.877074, "o", "n"]
[24.002273, "o", "s"]
[24.220811, "o", "p"]
[24.348596, "o", "e"]
[24.573502, "o", "c"]
[24.797198, "o", "t"]
[24.908542, "o", " "]
[25.173432, "o", "b"]
[25.268772, "o", "u"]
[25.381083, "o", "s"]
[25.469182, "o", "y"]
[25.700782, "o", "b"]
[25.820549, "o", "o"]
[25.924869, "o", "x"]
[26.332908, "o", "\u001b[1;25r\u001b[25;1H\n\u001b[1;26r\u001b[25;1H"]
[26.937602, "o", "\u001b[1;25r\u001b[25S\u001b[H ],\r\n \"Cmd\": [\r\n \"sh\"\r\n ]\r\n },\r\n \"rootfs\": {\r\n \"type\": \"layers\",\r\n \"diff_ids\": [\r\n \"sha256:be8b8b42328a15af9dd6af4cba85821aad30adde28d249d1ea03c74690530d1c\"\r\n ]\r\n },\r\n \"history\": [\r\n {\r\n \"created\": \"2020-09-09T01:38:02.18459328Z\",\r\n \"created_by\": \"/bin/sh -c #(nop) ADD file:72be520892d0a903df801c6425de761264d7c1bc7984d5cf285d778147826586 in / \"\r\n },\r\n {\r\n \"created\": \"2020-09-09T01:38:02.334927351Z\",\r\n \"created_by\": \"/bin/sh -c #(nop) CMD [\\\"sh\\\"]\",\r\n \"empty_layer\": true\r\n }\r\n ]\r\n}\u001b[?25l\u001b[1;26r\u001b[26;1H\u001b[30m\u001b[42m[preso] 0:regctl* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[25;1H\u001b[?12l\u001b[?25h"]
[26.939613, "o", "$ "]
[29.20171, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[25;3H\u001b[?12l\u001b[?25h"]
[29.201897, "o", "r"]
[29.29295, "o", "e"]
[29.5649, "o", "g"]
[29.876967, "o", "c"]
[30.125043, "o", "t"]
[30.260715, "o", "l"]
[30.389063, "o", " "]
[31.381318, "o", "i"]
[31.548784, "o", "m"]
[31.636887, "o", "a"]
[32.021403, "o", "g"]
[32.165001, "o", "e"]
[32.348981, "o", " "]
[32.524977, "o", "c"]
[32.603525, "o", "o"]
[32.700649, "o", "p"]
[32.828994, "o", "y"]
[32.949106, "o", " "]
[33.268715, "o", "-"]
[33.413344, "o", "v"]
[33.548641, "o", " "]
[33.796812, "o", "i"]
[33.901016, "o", "n"]
[34.02891, "o", "f"]
[34.117038, "o", "o"]
[34.28522, "o", " "]
[34.781063, "o", "b"]
[34.997146, "o", "u"]
[35.34914, "o", "s"]
[35.532844, "o", "y"]
[35.965109, "o", "b"]
[36.076638, "o", "o"]
[36.196945, "o", "x"]
[36.757095, "o", " "]
[37.853029, "o", "l"]
[38.037694, "o", "o"]
[38.11704, "o", "c"]
[38.205153, "o", "a"]
[38.325181, "o", "l"]
[38.53299, "o", "h"]
[38.637754, "o", "o"]
[38.700994, "o", "s"]
[38.829239, "o", "t"]
[39.069005, "o", ":"]
[39.261211, "o", "5"]
[39.580972, "o", "0"]
[39.732832, "o", "0"]
[39.88506, "o", "0"]
[40.322934, "o", "/"]
[40.540792, "o", "l"]
[40.717226, "o", "i"]
[40.82904, "o", "b"]
[41.109022, "o", "r"]
[41.309096, "o", "a"]
[41.461024, "o", "r"]
[41.605034, "o", "y"]
[41.940843, "o", "/"]
[42.829153, "o", "b"]
[42.929805, "o", "u"]
[43.041507, "o", "s"]
[43.180827, "o", "y"]
[43.364723, "o", "b"]
[43.493191, "o", "o"]
[43.58913, "o", "x"]
[44.029254, "o", "\u001b[1;25r\u001b[25;1H\n\u001b[1;26r\u001b[25;1H"]
[44.469869, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0000] Copy config \u001b[36mdigest\u001b[39m=\"sha256:6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3\"\u001b[?25l\u001b[1;26r\u001b[26;1H\u001b[30m\u001b[42m[preso] 0:regctl* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[25;1H\u001b[?12l\u001b[?25h"]
[44.601745, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0000] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:df8698476c65c2ee7ca0e9dbc2b1c8b1c91bce555819a9aaab724ac64241ba67\"\u001b[1;26r\u001b[25;1H"]
[44.797569, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0000] Copy config \u001b[36mdigest\u001b[39m=\"sha256:9f35fd9a874d2a76014da614227870d513aa77fb47a8a0d8ab882f94801f3a3f\"\u001b[1;26r\u001b[25;1H"]
[44.898565, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0000] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:290c10cb2479a1d7af2f36b8897edf64f5422380fac7c2fd002eb3f14febe48b\"\u001b[1;26r\u001b[25;1H"]
[45.100319, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy config \u001b[36mdigest\u001b[39m=\"sha256:c66d1a7656cf6cb17f9ec6ffff1e1af7779ce2799f6199ffae69feae55a3b286\"\u001b[1;26r\u001b[25;1H"]
[45.169352, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:3758744b8f0a57ac19b0ac2cd14922ae7cce4fc1cf2ebec9ab52f88bdceb9bda\"\u001b[1;26r\u001b[25;1H"]
[45.365658, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy config \u001b[36mdigest\u001b[39m=\"sha256:e7fb8978e4bd66cff5caef1e4974e847aeb6721c6310a10b914ba0b6722c4e32\"\u001b[1;26r\u001b[25;1H"]
[45.450638, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:f9e75b71dc3602bf178c4eaf257210063923c43caf7835fd0d66191fff49692b\"\u001b[1;26r\u001b[25;1H"]
[45.648039, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy config \u001b[36mdigest\u001b[39m=\"sha256:59b5e73fc75a038ff4ac087117c361f11eec781d5897ea69edc4a56409a9caa9\"\u001b[1;26r\u001b[25;1H"]
[45.722405, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:590851f7c68b60221f785e751c1621725689d5c2e39847c090ad0fb7b942d641\"\u001b[1;26r\u001b[25;1H"]
[45.922034, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy config \u001b[36mdigest\u001b[39m=\"sha256:84e20cddf6af817269a26d498197ead91564af613d9cec4dc6f8f0ce40ecc384\"\u001b[1;26r\u001b[25;1H"]
[46.00787, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0001] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:224fa80c44c4f6019ce1c1885df2d0906de94b10bf16a8351b39a784c8907640\"\u001b[1;26r\u001b[25;1H"]
[46.216971, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0002] Copy config \u001b[36mdigest\u001b[39m=\"sha256:d463e88d0c700d664fb8acd7a6f7a4ff983bab625bb4e40ce00e024be298886c\"\u001b[1;26r\u001b[25;1H"]
[46.297848, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0002] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:e52ce5e666e6e3508963271b704b8bc4b61b33a38cc3f6914c39e543a0fa7874\"\u001b[1;26r\u001b[25;1H"]
[46.506581, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0002] Copy config \u001b[36mdigest\u001b[39m=\"sha256:ac23343479ea1a0158197bb3dff6c6c21f672b5b58a70e8934c52d82241ea887\"\u001b[1;26r\u001b[25;1H"]
[46.59683, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0002] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:d997fe81ee23c0adf99f8b21421f60113323df5fda7e5aa4066e45adf4136009\"\u001b[1;26r\u001b[25;1H"]
[46.926743, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0002] Copy config \u001b[36mdigest\u001b[39m=\"sha256:cd66a73a28e6a8209d33c753fde58678084ad3c4e21ae5c6adc6429c29c245d1\"\u001b[1;26r\u001b[25;1H"]
[47.004024, "o", "\u001b[1;25r\u001b[2S\u001b[23d\u001b[36mINFO\u001b[39m[0002] Copy layer \u001b[36mlayer\u001b[39m=\"sha256:d2a291f672b25b9b207b31edd6ea3d151df35e523bd269c0bee5ce9f0d590d1c\"\u001b[1;26r\u001b[25;1H"]
[47.255116, "o", "$ "]
[47.655492, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:05 26-Sep-20\u001b(B\u001b[m\u001b[25;3H\u001b[?12l\u001b[?25h"]
[49.593591, "o", "r"]
[49.70091, "o", "e"]
[49.997183, "o", "g"]
[50.388876, "o", "c"]
[50.642784, "o", "t"]
[50.764734, "o", "l"]
[50.87747, "o", " "]
[51.77332, "o", "t"]
[53.981161, "o", "a"]
[54.244885, "o", "g"]
[54.436966, "o", " "]
[54.676881, "o", "l"]
[54.852637, "o", "s"]
[55.020933, "o", " "]
[55.469045, "o", "l"]
[55.653001, "o", "o"]
[55.732972, "o", "c"]
[55.861116, "o", "a"]
[55.948777, "o", "l"]
[56.141035, "o", "h"]
[56.261102, "o", "o"]
[56.317247, "o", "s"]
[56.44465, "o", "t"]
[56.661211, "o", ":"]
[56.866593, "o", "5"]
[57.309308, "o", "0"]
[57.477041, "o", "0"]
[57.621178, "o", "0"]
[57.917131, "o", "/"]
[58.293422, "o", "l"]
[58.476964, "o", "i"]
[58.580805, "o", "b"]
[58.820966, "o", "r"]
[58.949088, "o", "a"]
[59.029292, "o", "r"]
[59.149166, "o", "y"]
[59.445098, "o", "/"]
[59.709042, "o", "b"]
[59.804705, "o", "u"]
[59.926255, "o", "s"]
[60.007629, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:06 26-Sep-20\u001b(B\u001b[m\u001b[25;43H\u001b[?12l\u001b[?25h"]
[60.012681, "o", "y"]
[60.165225, "o", "b"]
[60.276906, "o", "o"]
[60.388753, "o", "x"]
[60.677052, "o", "\u001b[1;25r\u001b[25;1H\n\u001b[1;26r\u001b[25;1H"]
[60.699432, "o", "\u001b[1;25r\u001b[25;1H\n\u001b[Alibrary/busybox:latest\u001b[1;26r\u001b[25;1H"]
[60.701776, "o", "$ "]
[61.765275, "o", "r"]
[61.861069, "o", "e"]
[62.08486, "o", "g"]
[62.445218, "o", "c"]
[62.661264, "o", "t"]
[62.780799, "o", "l"]
[62.908727, "o", " "]
[63.1332, "o", "i"]
[63.325405, "o", "m"]
[63.389793, "o", "a"]
[63.469283, "o", "g"]
[63.541641, "o", "e"]
[63.660869, "o", " "]
[63.869042, "o", "m"]
[63.972887, "o", "a"]
[64.084758, "o", "n"]
[64.284702, "o", "i"]
[64.39686, "o", "f"]
[64.564993, "o", "e"]
[64.637246, "o", "s"]
[64.74128, "o", "t"]
[64.868482, "o", " "]
[65.141375, "o", "-"]
[65.277018, "o", "-"]
[65.509228, "o", "l"]
[65.724928, "o", "i"]
[65.82899, "o", "s"]
[65.893134, "o", "t"]
[66.03669, "o", " "]
[66.525, "o", "l"]
[66.717033, "o", "o"]
[66.813094, "o", "c"]
[66.909088, "o", "a"]
[67.044962, "o", "l"]
[67.261058, "o", "h"]
[67.36507, "o", "o"]
[67.452911, "o", "s"]
[67.597025, "o", "t"]
[67.869162, "o", ":"]
[68.068817, "o", "5"]
[68.4849, "o", "0"]
[68.637146, "o", "0"]
[68.78113, "o", "0"]
[69.133241, "o", "/"]
[69.421181, "o", "l"]
[69.601391, "o", "i"]
[69.716711, "o", "b"]
[69.932654, "o", "r"]
[70.060658, "o", "a"]
[70.157018, "o", "r"]
[70.332806, "o", "y"]
[70.765139, "o", "/"]
[71.076973, "o", "b"]
[71.16492, "o", "u"]
[71.308862, "o", "s"]
[71.412871, "o", "y"]
[71.629157, "o", "b"]
[71.764993, "o", "o"]
[71.861187, "o", "x"]
[72.053033, "o", " "]
[72.460932, "o", " "]
[72.644984, "o", "|"]
[73.293212, "o", " "]
[73.548826, "o", "m"]
[73.666944, "o", "o"]
[73.738928, "o", "r"]
[73.852864, "o", "e"]
[74.188971, "o", "\u001b[1;25r\u001b[25;1H\n\u001b[1;26r\u001b[25;1H"]
[74.201264, "o", "\u001b[1;25r\u001b[12S\u001b[13d{\r\n \"schemaVersion\": 2,\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.list.v2+json\",\r\n \"manifests\": [\r\n {\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002\",\r\n \"platform\": {\r\n \"architecture\": \"amd64\",\r\n \"os\": \"linux\"\r\n }\u001b[1;26r\u001b[25;1H\u001b[1;25r\u001b[12S\u001b[13d },\r\n {\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:55dec6dbd4b329ef2bfc2e104ab6ee57ef1a91f15c8bd324650b34756f43ad61\",\r\n \"platform\": {\r\n \"architecture\": \"arm\",\r\n \"os\": \"linux\",\r\n \"variant\": \"v5\"\r\n }\r\n },\r\n {\u001b[1;26r\u001b[25;1H\u001b[7m--More--"]
[74.201397, "o", "\u001b(B\u001b[m"]
[75.82175, "o", "\u001b[1;25r\u001b[10S\u001b[15d \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:8bec2de1c91b986218004f65a7ef40989ac9827e80ed02c7ac5cd18058213ba7\",\r\n \"platform\": {\r\n \"architecture\": \"arm\",\r\n \"os\": \"linux\",\r\n \"variant\": \"v6\"\r\n }\r\n },\r\n {\u001b[1;26r\u001b[25;1H\u001b[1;25r\u001b[14S\u001b[11d \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:2e6dd9846f4022bd771bd7371114d60cf032e15bd160ab6172b776f9fc49812c\",\r\n \"platform\": {\r\n \"architecture\": \"arm\",\r\n \"os\": \"linux\",\r\n \"variant\": \"v7\"\r\n }\r\n },\r\n {\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:614f2e7b8fbab8a23bef168e7058739180a7a15d17c583bdfcbdb647d9798079\",\r\n \"platform\": {\r\n\u001b[7m--More--"]
[75.82187, "o", "\u001b[1;26r\u001b[25;9H\u001b(B\u001b[m"]
[76.949647, "o", "\u001b[1;25r\u001b[11S\u001b[14d \"architecture\": \"arm64\",\r\n \"os\": \"linux\",\r\n \"variant\": \"v8\"\r\n }\r\n },\r\n {\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:13786684a2d2c684562fd93652fe803fad2ca9fc596ea793ca67b6bbeb2c4730\",\r\n \"platform\": {\r\n \"architecture\": \"386\",\u001b[1;26r\u001b[25;1H\u001b[1;25r\u001b[13S\u001b[12d \"os\": \"linux\"\r\n }\r\n },\r\n {\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 527,\r\n \"digest\": \"sha256:1d67a71f84422fa78f03573a44a419d023682b1c6aa1c380c9d84f69cc79e7f6\",\r\n \"platform\": {\r\n \"architecture\": \"mips64le\",\r\n \"os\": \"linux\"\r\n }\r\n },\r\n {\r\n\u001b[7m--More--\u001b[1;26r\u001b[25;9H\u001b(B\u001b[m"]
[77.821316, "o", "\u001b[1;25r\u001b[10S\u001b[15d \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\r\n \"size\": 528,\r\n \"digest\": \"sha256:49c781843a30b2af8fff421e4f2dde9365fb778d5ce11a88991d1ab6056d8f40\",\r\n \"platform\": {\r\n \"architecture\": \"ppc64le\",\r\n \"os\": \"linux\"\r\n }\r\n },\r\n {\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\u001b[1;26r\u001b[25;1H\u001b[1;25r\u001b[9S\u001b[16d \"size\": 528,\r\n \"digest\": \"sha256:2ed8bd58e1966fc775f4ba7e97a56ceb1fdd96706779ae8bcb59bc8dbae21be8\",\r\n \"platform\": {\r\n \"architecture\": \"s390x\",\r\n \"os\": \"linux\"\r\n }\r\n }\r\n ]\r\n}"]
[77.821688, "o", "\u001b[1;26r\u001b[25;1H"]
[77.821886, "o", "$ "]
[82.792421, "o", "\u001b[?25l\u001b[H \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\", \u001b[30m\u001b[43m[23/235]\u001b[2;1H\u001b[39m\u001b[49m \"size\": 527,\u001b[K\r\n \"digest\": \"sha256:614f2e7b8fbab8a23bef168e7058739180a7a15d17c583bdfcbdb647d9798079\", \u001b[K\r\n \"platform\": {\u001b[K\r\n \"architecture\": \"arm64\",\u001b[K\r\n \"os\": \"linux\", \u001b[K\r\n \"variant\": \"v8\"\u001b[K\r\n } \u001b[K\r\n },\u001b[K\r\n {\u001b[K\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\", \u001b[K\r\n \"size\": 527,\u001b[K\r\n \"digest\": \"sha256:13786684a2d2c684562fd93652fe803fad2ca9fc596ea793ca67b6bbeb2c4730\", \u001b[K\r\n \"platform\": {\u001b[K\r\n \"architecture\": \"386\", \u001b[K\r\n \"os\": \"linux\"\u001b[K\r\n } "]
[82.792804, "o", " \u001b[K\r\n },\u001b[K\r\n {\u001b[K\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\", \u001b[K\r\n \"size\": 527,\u001b[K\r\n \"digest\": \"sha256:1d67a71f84422fa78f03573a44a419d023682b1c6aa1c380c9d84f69cc79e7f6\", \u001b[K\r\n \"platform\": {\u001b[K\r\n \"architecture\": \"mips64le\",\u001b[K\r\n \"os\": \"linux\"\u001b[K\u001b[?12l\u001b[?25h"]
[82.793715, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:[tmux]* \"bmitch-t490\" 16:06 26-Sep-20\u001b(B\u001b[m\u001b[25;22H\u001b[?12l\u001b[?25h"]
[90.702218, "o", "\u001b[?25l\u001b[H \"architecture\": \"mips64le\",\u001b[K\r\n \"os\": \"linux\"\u001b[K\r\n }\u001b[K\r\n },\u001b[K\r\n {\u001b[K\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\", \u001b[K\r\n \"size\": 528,\u001b[K\r\n \"digest\": \"sha256:49c781843a30b2af8fff421e4f2dde9365fb778d5ce11a88991d1ab6056d8f40\", \u001b[K\r\n \"platform\": {\u001b[K\r\n \"architecture\": \"ppc64le\",\u001b[K\r\n \"os\": \"linux\"\u001b[K\r\n }\u001b[K\r\n },\u001b[K\r\n {\u001b[K\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\", \u001b[K\r\n \"size\": 528,\u001b[K\r\n \"digest\": \"sha256:2ed8bd58e1966fc775f4ba7e97a56ceb1fdd96706779ae8bcb59bc8dbae21be8\", \u001b[K\r\n \"platform\": {\u001b[K\r\n \"architecture\": \"s390x\",\u001b[K\r\n \"os\": \"linux\"\u001b[K\r\n }\u001b[K\r\n }\u001b[K\r\n ]\u001b[K\r\n}\u001b[K\r\n$\u001b[K\u001b[C\u001b[?12l\u001b[?25h"]
[90.703298, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:06 26-Sep-20\u001b(B\u001b[m\u001b[25;3H\u001b[?12l\u001b[?25h"]
[91.438539, "o", "r"]
[91.548987, "o", "e"]
[91.837682, "o", "g"]
[92.205169, "o", "c"]
[92.541277, "o", "t"]
[92.717075, "o", "l"]
[92.813097, "o", " "]
[93.213273, "o", "i"]
[93.421256, "o", "m"]
[93.509312, "o", "a"]
[93.589423, "o", "g"]
[93.685067, "o", "e"]
[93.781279, "o", " "]
[94.004839, "o", "i"]
[94.101134, "o", "n"]
[94.269152, "o", "s"]
[94.349291, "o", "p"]
[94.461114, "o", "e"]
[94.677272, "o", "c"]
[94.844993, "o", "t"]
[94.970232, "o", " "]
[95.237079, "o", "-"]
[95.364931, "o", "-"]
[95.637349, "o", "p"]
[95.917193, "o", "l"]
[96.077276, "o", "a"]
[96.421277, "o", "t"]
[96.940506, "o", "f"]
[97.06092, "o", "o"]
[97.141228, "o", "r"]
[97.277319, "o", "m"]
[97.429332, "o", " "]
[97.96548, "o", "l"]
[98.149223, "o", "i"]
[98.29331, "o", "n"]
[98.509164, "o", "u"]
[98.652984, "o", "x"]
[98.844976, "o", "/"]
[99.650842, "o", "a"]
[99.789324, "o", "r"]
[99.909193, "o", "m"]
[100.445294, "o", "6"]
[100.732967, "o", "4"]
[101.461445, "o", " "]
[101.717311, "o", "l"]
[101.917093, "o", "o"]
[101.981179, "o", "c"]
[102.061233, "o", "a"]
[102.204967, "o", "l"]
[102.461015, "o", "h"]
[102.557124, "o", "o"]
[102.629109, "o", "s"]
[102.749279, "o", "t"]
[103.004947, "o", ":"]
[103.221054, "o", "5"]
[103.63728, "o", "0"]
[103.81295, "o", "0"]
[103.965287, "o", "0"]
[104.285526, "o", "/"]
[104.509263, "o", "l"]
[104.717354, "o", "i"]
[104.812909, "o", "b"]
[105.036989, "o", "r"]
[105.141068, "o", "a"]
[105.253261, "o", "r"]
[106.109284, "o", "y"]
[107.493413, "o", "/"]
[108.005535, "o", "b"]
[108.085272, "o", "u"]
[108.237079, "o", "s"]
[108.361695, "o", "y"]
[108.573215, "o", "b"]
[108.701033, "o", "o"]
[108.781298, "o", "x"]
[109.950817, "o", "\u001b[1;25r\u001b[25;1H\n\u001b[1;26r\u001b[25;1H"]
[109.991285, "o", "\u001b[1;25r\u001b[25S\u001b[H ],\r\n \"Cmd\": [\r\n \"sh\"\r\n ]\r\n },\r\n \"rootfs\": {\r\n \"type\": \"layers\",\r\n \"diff_ids\": [\r\n \"sha256:2035cbc36ca35ca1b6a00b184cbbabdbda1fe7ac791c2e045ba47e92743fbfd1\"\r\n ]\r\n },\r\n \"history\": [\r\n {\r\n \"created\": \"2020-09-09T00:48:40.426776549Z\",\r\n \"created_by\": \"/bin/sh -c #(nop) ADD file:9fa3d16e04c526c9701422d8ee212aebecd8149c6570b5041da24be49c765604 in / \"\r\n },\r\n {\r\n \"created\": \"2020-09-09T00:48:41.336241778Z\",\r\n \"created_by\": \"/bin/sh -c #(nop) CMD [\\\"sh\\\"]\",\r\n \"empty_layer\": true\r\n }\r\n ]\r\n}\u001b[1;26r\u001b[25;1H"]
[109.993124, "o", "$ "]
[112.605125, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:07 26-Sep-20\u001b(B\u001b[m\u001b[25;3H\u001b[?12l\u001b[?25h"]
[113.078937, "o", "\u001b[?25l\u001b[H \"architecture\": \"ppc64le\", \u001b[30m\u001b[43m[23/267]\u001b[2;1H\u001b[39m\u001b[49m \"os\": \"linux\"\u001b[K\r\n }\u001b[K\r\n },\u001b[K\r\n {\u001b[K\r\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\", \u001b[K\r\n \"size\": 528,\u001b[K\r\n \"digest\": \"sha256:2ed8bd58e1966fc775f4ba7e97a56ceb1fdd96706779ae8bcb59bc8dbae21be8\", \u001b[K\r\n \"platform\": { \u001b[K\r\n \"architecture\": \"s390x\",\u001b[K\r\n \"os\": \"linux\"\u001b[K\r\n }\u001b[K\r\n }\u001b[K\r\n ]\u001b[K\r\n} \u001b[K\r\n$ regctl image inspect --platform linux/arm64 localhost:5000/library/busybox \u001b[K\r\n{\u001b[K\r\n \"created\": \"2020-09-09T00:48:41.336241778Z\",\u001b[K\r\n \"architecture\": \"arm64\",\u001b[K\r\n \"os\": \"linux\", \u001b[K\r\n "]
[113.07932, "o", "\"config\": {\u001b[K\r\n \"Env\": [\u001b[K\r\n \"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\" \u001b[K\r\n ],\u001b[K\r\n \"Cmd\": [\u001b[K\u001b[?12l\u001b[?25h"]
[113.07998, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:[tmux]* \"bmitch-t490\" 16:07 26-Sep-20\u001b(B\u001b[m\u001b[25;13H\u001b[?12l\u001b[?25h"]
[114.525446, "o", "\u001b[24;7H"]
[114.733242, "o", "\u001b[23;74H"]
[114.925655, "o", "\u001b[22;13H"]
[115.107835, "o", "\u001b[21;14H"]
[115.285191, "o", "\u001b[20;17H"]
[115.469404, "o", "\u001b[19;27H"]
[115.981592, "o", "\b"]
[116.181645, "o", "\b"]
[116.357839, "o", "\b"]
[116.549476, "o", "\b"]
[116.741765, "o", "\b"]
[116.925458, "o", "\b"]
[117.101265, "o", "\b"]
[117.293675, "o", "\u001b[30m\u001b[43ma\b\u001b(B\u001b[m"]
[117.425785, "o", "\u001b[30m\u001b[43mar\b\u001b(B\u001b[m"]
[117.621619, "o", "\b\u001b[30m\u001b[43marm\b\u001b(B\u001b[m"]
[117.798123, "o", "\b\b\u001b[30m\u001b[43marm6\b\u001b(B\u001b[m"]
[117.97359, "o", "\u001b[3D\u001b[30m\u001b[43marm64\b\u001b(B\u001b[m"]
[119.150465, "o", "\u001b[?25l\u001b[H ],\u001b[K\r\n \"Cmd\": [\u001b[K\r\n \"sh\"\u001b[K\r\n ]\u001b[K\r\n },\u001b[K\r\n \"rootfs\": {\u001b[K\r\n \"type\": \"layers\",\u001b[K\r\n \"diff_ids\": [\u001b[K\r\n \"sha256:2035cbc36ca35ca1b6a00b184cbbabdbda1fe7ac791c2e045ba47e92743fbfd1\" \u001b[K\r\n ]\u001b[K\r\n },\u001b[K\r\n \"history\": [\u001b[K\r\n {\u001b[K\r\n \"created\": \"2020-09-09T00:48:40.426776549Z\", \u001b[K\r\n \"created_by\": \"/bin/sh -c #(nop) ADD file:9fa3d16e04c526c9701422d8ee212aebecd8149c6570b5041da24be49c765604 in / \"\u001b[K\r\n },\u001b[K\r\n {\u001b[K\r\n \"created\": \"2020-09-09T00:48:41.336241778Z\", \u001b[K\r\n \"created_by\": \"/bin/sh -c #(nop) CMD [\\\"sh\\\"]\", \u001b[K\r\n \"empty_layer\": true\u001b[K\r\n }\u001b[K\r\n ]\u001b[K\r\n}\u001b[K\r\n$\u001b[K\u001b[C\u001b[?12l\u001b[?25h"]
[119.1518, "o", "\u001b[?25l\r\n\u001b[30m\u001b[42m[preso] 0:bash* \"bmitch-t490\" 16:07 26-Sep-20\u001b(B\u001b[m\u001b[25;3H\u001b[?12l\u001b[?25h"]

BIN
docs/demo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 KiB

View File

@ -85,6 +85,10 @@ func (rc *regClient) TagDelete(ctx context.Context, ref Ref) error {
origByte: manfB,
}
rc.log.WithFields(logrus.Fields{
"ref": ref.Reference,
}).Debug("Sending dummy manifest to replace tag")
// push config
err = rc.BlobPut(ctx, ref, confDigest.String(), ioutil.NopCloser(bytes.NewReader(confB)), MediaTypeDocker2ImageConfig, int64(len(confB)))
if err != nil {
@ -100,6 +104,10 @@ func (rc *regClient) TagDelete(ctx context.Context, ref Ref) error {
ref.Digest = manfDigest.String()
// delete manifest by digest
rc.log.WithFields(logrus.Fields{
"ref": ref.Reference,
"digest": ref.Digest,
}).Debug("Deleting dummy manifest")
err = rc.ManifestDelete(ctx, ref)
if err != nil {
return err