docker-image

Crates.iodocker-image
lib.rsdocker-image
version0.2.1
created_at2024-11-17 13:54:02.41458+00
updated_at2025-02-22 10:08:26.230808+00
descriptionA simple, no_std-compatible Docker image reference parser with strict adherence to Docker's naming rules.
homepagehttps://github.com/sunsided/docker-image-rs
repositoryhttps://github.com/sunsided/docker-image-rs
max_upload_size
id1451275
size46,419
Markus Mayer (sunsided)

documentation

README

๐Ÿ‹ docker-image

A utility crate for parsing Docker image references.

Crates.io Docs Build Status Safety Dance codecov MSRV EUPL 1.2 licensed

Features

  • Parse Docker image references into structured components:
    • Registry (e.g., docker.io, ghcr.io)
    • Name (e.g., nginx, library/nginx)
    • Tag (e.g., latest, v1.0.0)
    • Digest (e.g., sha256:<64-character-digest>)
  • Validate Docker image references against Docker's official naming rules.
  • Designed for safety:
    • #![no_std] compatible for embedded and minimal environments (however alloc remains a requirement).
    • #![forbid(unsafe_code)] ensures memory safety.
  • Minimum Supported Rust Version (MSRV): Rust 1.81.0
    • This is the earliest version of Rust required to use this library.
    • Note: The MSRV may increase in future releases due to updates in dependencies or library features.

Supported Formats:

  • nginx
  • nginx:latest
  • docker.io/library/nginx
  • docker.io/library/nginx:latest
  • docker.io/library/nginx@sha256:<digest>
  • docker.io/library/nginx:latest@sha256:<digest>

Not Supported:

  • Unicode characters in names, tags, or digests.
  • Uppercase letters in names (Docker requires lowercase).
  • Invalid or malformed registries, tags, or digests.

Usage Examples

Parsing a Docker Image Reference

use docker_image::DockerImage;

fn it_works() {
    let image = DockerImage::parse("docker.io/library/nginx:latest").unwrap();
    assert_eq!(image.registry, Some("docker.io".to_string()));
    assert_eq!(image.name, "library/nginx".to_string());
    assert_eq!(image.tag, Some("latest".to_string()));
    assert_eq!(image.digest, None);
}

Invalid Docker Image Reference

use docker_image::DockerImage;

fn it_works() {
    let result = DockerImage::parse("nginx๐Ÿš€");
    assert_eq!(result, Err(DockerImageError::InvalidFormat));
}

Display Implementation

use docker_image::DockerImage;

fn it_works() {
    let image = DockerImage {
        registry: Some("docker.io".to_string()),
        name: "library/nginx".to_string(),
        tag: Some("latest".to_string()),
        digest: None,
    };

    assert_eq!(format!("{}", image), "docker.io/library/nginx:latest");
}
Commit count: 20

cargo fmt