A Docker tool, modelled on containerd's architecture.
- Copy container images between registries with progress reporting
- Inspect image metadata without pulling image layers
- List tags for an image repository
- Supports OCI Image Spec and Docker Schema 2 wire formats
- Multi-platform manifest index support (
--allor--platform) - Reads credentials from
~/.docker/config.jsonautomatically
dtool copy docker://ubuntu:22.04 docker://myregistry.io/ubuntu:22.04Copy all platforms from a manifest index:
dtool copy --all docker://ubuntu:22.04 docker://myregistry.io/ubuntu:22.04Copy a specific platform:
dtool copy --platform linux/arm64 docker://ubuntu:22.04 docker://myregistry.io/ubuntu:22.04dtool inspect docker://ubuntu:22.04Print raw manifest or config JSON:
dtool inspect --raw docker://ubuntu:22.04
dtool inspect --config docker://ubuntu:22.04dtool list-tags docker://ubuntuReferences use a TRANSPORT:REFERENCE notation. The docker:// transport is the only one fully implemented. When no transport prefix is given, docker:// is assumed.
docker://registry.io/image:tag
docker://registry.io/image@sha256:<digest>
Credentials are resolved in this order:
--src-creds USER:PASS/--dest-creds USER:PASS/--creds USER:PASSCLI flags~/.docker/config.json(theauthfield orusername/passwordfields)
Note: External credential helpers (e.g.
docker-credential-desktop) are not currently supported.
dtool mirrors containerd's architecture in Rust:
Resolver,Fetcher, andPushertraits map to containerd'score/remotes/interfacesDescriptor,Manifest,Indexmodel OCI and Docker Schema 2 wire formats- Platform matching follows the same rules as
github.com/containerd/platforms
The registry HTTP client is implemented in Go (go/libdtool.go) using containerd's core/remotes/docker package and compiled into a static C archive (libdtool_go.a) that is linked into the Rust binary at build time.