{"id":28653878,"url":"https://github.com/yorelog/docker-image-pusher","last_synced_at":"2026-03-11T21:06:11.749Z","repository":{"id":297377921,"uuid":"996549795","full_name":"yorelog/docker-image-pusher","owner":"yorelog","description":"Docker Image Pusher - a Rust CLI tool for pushing  Docker image tar packages directly to registries","archived":false,"fork":false,"pushed_at":"2025-12-26T06:23:49.000Z","size":2911,"stargazers_count":19,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2025-12-27T13:58:33.269Z","etag":null,"topics":["docker-client","docker-tar","harbor","import-docker-image","rust-crate","rust-library"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yorelog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-05T05:37:56.000Z","updated_at":"2025-12-26T06:17:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"acb5e7c2-5467-459a-9801-a00af6b98297","html_url":"https://github.com/yorelog/docker-image-pusher","commit_stats":null,"previous_names":["yorelog/docker-image-pusher"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/yorelog/docker-image-pusher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yorelog%2Fdocker-image-pusher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yorelog%2Fdocker-image-pusher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yorelog%2Fdocker-image-pusher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yorelog%2Fdocker-image-pusher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yorelog","download_url":"https://codeload.github.com/yorelog/docker-image-pusher/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yorelog%2Fdocker-image-pusher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30400839,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T21:02:20.017Z","status":"ssl_error","status_checked_at":"2026-03-11T20:59:32.667Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-client","docker-tar","harbor","import-docker-image","rust-crate","rust-library"],"created_at":"2025-06-13T07:07:58.229Z","updated_at":"2026-03-11T21:06:11.743Z","avatar_url":"https://github.com/yorelog.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker Image Pusher\n\n[English](README.md) | [简体中文](README.zh-CN.md)\n\n[![Build Status](https://github.com/yorelog/docker-image-pusher/workflows/Build/badge.svg)](https://github.com/yorelog/docker-image-pusher/actions)\n[![Crates.io](https://img.shields.io/crates/v/docker-image-pusher.svg)](https://crates.io/crates/docker-image-pusher)\n[![Downloads](https://img.shields.io/crates/d/docker-image-pusher.svg)](https://crates.io/crates/docker-image-pusher)\n[![License](https://img.shields.io/github/license/yorelog/docker-image-pusher)](https://github.com/yorelog/docker-image-pusher)\n\nA tiny, memory‑friendly Docker/OCI image pusher for large images and constrained hosts.\n\nHighlights:\n- Streaming layer uploads with bounded memory\n- Chunked uploads for large layers (auto‑adapts to registry hints)\n- Clear progress reporting; resumable upload sessions\n- Works with tar archives or directly from containerd\n- Simple override: `docker.io/nginx:v1` + `--target gitea.corp.com/proj` -\u003e `gitea.corp.com/proj/nginx:v1`\n\n## 📦 Install\n\n- Releases: download binaries from [GitHub Releases](https://github.com/yorelog/docker-image-pusher/releases)\n- Crates.io: `cargo install docker-image-pusher`\n- From source:\n    ```bash\n    git clone https://github.com/yorelog/docker-image-pusher\n    cd docker-image-pusher \u0026\u0026 cargo build --release\n    ```\n\n\n## 📖 Usage\n\n### Quick Start (three commands)\n\n1. **Login (once per registry)**\n    ```bash\n    docker-image-pusher login registry.example.com --username user --password pass\n    ```\n    Credentials are saved under `.docker-image-pusher/credentials.json` and reused automatically.\n\n2. **Save a local image to a tarball (optional)**\n    ```bash\n    docker-image-pusher save nginx:latest --out ./\n    # produces ./nginx_latest.tar\n    ```\n\n3. **Push the tar archive**\n    ```bash\n    docker-image-pusher push --tar ./nginx_latest.tar\n    ```\n    - Use `--target` to set the exact destination. If omitted, we infer from tar metadata and (optionally) `--registry`.\n    - If the destination was confirmed previously, we auto-continue after a short pause; otherwise we prompt once.\n\n### Command Reference\n\n| Command | When to use | Key flags |\n|---------|-------------|-----------|\n| `save [IMAGE ...]` | Export local images to tar/portable folder | `--out`, `--root`, `--namespace`, `--digest` |\n| `push --tar \u003cTAR\u003e` | Upload a docker-save tar directly to a registry | `-t/--target`, `--registry`, `--username/--password`, `--blob-chunk` |\n| `push --image \u003cIMAGE\u003e` | Push directly from containerd (no tar) | `--root`, `--namespace`, `-t/--target`, `--username/--password`, `--blob-chunk` |\n| `login \u003cregistry\u003e` | Persist credentials for future pushes | `--username`, `--password` |\n\n### Destination overrides\n\n- If the tar contains `docker.io/nginx:v1` and you pass `--target gitea.corp.com/project1`,\n    the final destination resolves to `gitea.corp.com/project1/nginx:v1` (repo/tag taken from tar).\n- If you pass a full target like `--target gitea.corp.com/project1/nginx:custom`, it is used as-is.\n- `--registry` only affects inference when `--target` is not provided; it forces the registry host while keeping repo/tag from tar metadata.\n\n## 🧭 Scenarios\n\n### 1) Push a docker-save tar to a private registry\n\n```bash\ndocker-image-pusher login harbor.xxx.com --username USER --password PASS\ndocker-image-pusher push --tar ./app_1.0.0.tar \\\n    --target harbor.xxx.com/org/app:1.0.0\n```\n\nNotes:\n- Use `--target` to specify the destination (registry/org/repo:tag)\n- Use `--registry harbor.xxx.com` only if a host override is needed\n- `--blob-chunk` sets chunk size (MiB) for large layers\n\n### 2) Push directly from containerd (no tar)\n\n```bash\ndocker-image-pusher push \\\n    --root ~/.local/share/containerd \\\n    --namespace default \\\n    --image org/app:1.0.0 \\\n    --target harbor.xxx.com/org/app:1.0.0\n```\n\nOptional: export for offline delivery/audit, then push when needed:\n\n```bash\ndocker-image-pusher save \\\n    --root ~/.local/share/containerd \\\n    --namespace default \\\n    --out ./export \\\n    org/app:1.0.0\n```\n\nTip: First push to a new target may ask for a one‑time confirmation based on history/metadata; subsequent pushes auto‑continue.\n\n\n## 📚 More\n\n- Advanced architecture: see ARCHITECTURE.md\n- Reusable OCI library: crates/oci-core/README.md\n\n## 🤝 Contributing\n\nPRs and issues welcome. Happy pushing! 🐳\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyorelog%2Fdocker-image-pusher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyorelog%2Fdocker-image-pusher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyorelog%2Fdocker-image-pusher/lists"}