Use Advanced Docker Operations with Artifactory CLI
Advanced Docker operations using JFrog CLI's Artifactory commands (jf rt). These commands are separate from the main jf docker command and provide integration with alternative container tools (Podman, Kaniko, buildx, OpenShift) and Docker image lifecycle management (build-docker-create, docker-promote).
This topic covers the following tasks:
- Pull Docker images using Podman
- Push Docker images using Podman
- Push Docker images using Kaniko
- Push Docker images using buildx
- Push Docker images using OpenShift CLI
- Add published Docker images to the build-info
- Promote Docker images
Deprecation notice
The
jf rt docker-pushandjf rt docker-pullcommands are deprecated. Usejf docker pushandjf docker pullinstead. The deprecated commands are hidden from--helpoutput but still functional for backwards compatibility.This deprecation applies only to the native Docker commands above. The Podman-specific commands
jf rt podman-pullandjf rt podman-pushare not deprecated and remain the supported path for Podman-based workflows.
Prerequisites
Before running any commands on this page, ensure the following are in place.
To prepare your environment:
- JFrog CLI configured — run
jf config addand verify withjf config show. - Docker repositories exist — the source and target repositories must already exist in your Artifactory instance.
- Podman installed — required for
podman-pullandpodman-pushcommands.- On macOS, Podman requires a running VM:
podman machine init && podman machine start - Verify:
podman --version
- On macOS, Podman requires a running VM:
- Podman authenticated to your registry — the CLI automatically attempts
podman loginbefore pull/push. Pre-authenticate to avoid failures:If your Artifactory server is configured with a reference token (non-JWT), Podman requires explicit username credentials. Use thepodman login <your-registry>--userflag onpodman-pullandpodman-push, or pre-login manually:podman login <your-registry> --username <artifactory-username> --password <access-token>
Pulling Docker Images Using Podman
Podman is a daemon-less container engine for developing, managing, and running OCI Containers. The podman-pull command pulls docker images from Artifactory using Podman, while collecting build-info.
To pull Docker images using Podman:
- Ensure Prerequisites are met and your image tag uses the form
<registry>/<repo-path>/<image>:<tag>. - Run
jf rt podman-pullwith the image tag, source repository, and optional build-info flags (see Example below).
| Parameter | Description |
|---|---|
| Command-name | rt podman-pull |
| Abbreviation | rt ppl |
--server-id | [Optional] Server ID configured using jf config |
--user | [Optional] Artifactory username. Required when the server uses a reference token (non-JWT). |
--build-name | [Optional] Build name |
--build-number | [Optional] Build number |
--project | [Optional] JFrog project key |
--module | [Optional] Module name for build-info |
--skip-login | [Default: false] Skip Docker login |
| Image tag | The docker image tag to pull. Must be in the form <registry>/<repo-path>/<image>:<tag> |
| Source repository | Source repository in Artifactory |
Image tag format
The image tag must include a repository sub-path between the registry domain and the image name:
<registry>/<repo-path>/<image>:<tag>. For example,my-registry.io/my-repo/my-image:latest. A two-component path such asmy-registry.io/my-image:latestis not accepted.
Example
jf rt podman-pull <registry>/<repo-path>/<image>:<tag> <source-repo> --build-name <build-name> --build-number <build-number>Where:
<registry>is your Artifactory Docker registry (for example,my-docker-registry.io)<repo-path>is the repository sub-path within the registry (for example,my-repo)<image>:<tag>is the Docker image name and tag (for example,my-docker-image:latest)<source-repo>is the source repository in Artifactory (for example,docker-local)
For example:
jf rt podman-pull my-docker-registry.io/my-repo/my-docker-image:latest docker-local --build-name my-build-name --build-number 7Expected output
On success, the command prints the pulled image layers and build-info collection status:
[Info] Pulling image: my-docker-registry.io/my-repo/my-docker-image:latest
[Info] Build info successfully collected for build my-build-name/7
Pushing Docker Images Using Podman
After building your image, the podman-push command pushes the image layers to Artifactory, while collecting build-info.
To push Docker images using Podman:
- Ensure Prerequisites are met and your image tag uses the form
<registry>/<repo-path>/<image>:<tag>. - Run
jf rt podman-pushwith the image tag, target repository, and optional build-info flags (see Example below).
| Parameter | Description |
|---|---|
| Command-name | rt podman-push |
| Abbreviation | rt pp |
--server-id | [Optional] Server ID configured using jf config |
--user | [Optional] Artifactory username. Required when the server uses a reference token (non-JWT). |
--build-name | [Optional] Build name |
--build-number | [Optional] Build number |
--project | [Optional] JFrog project key |
--module | [Optional] Module name for build-info |
--skip-login | [Default: false] Skip Docker login |
--threads | [Default: 3] Number of working threads |
--detailed-summary | [Default: false] Include affected files in the command summary |
--validate-sha | [Default: false] Enable SHA validation during Docker push |
| Image tag | The docker image tag to push. Must be in the form <registry>/<repo-path>/<image>:<tag> |
| Target repository | Target repository in Artifactory |
Image tag format
The image tag must include a repository sub-path between the registry domain and the image name:
<registry>/<repo-path>/<image>:<tag>. For example,my-registry.io/my-repo/my-image:latest. A two-component path such asmy-registry.io/my-image:latestis not accepted.
Example
jf rt podman-push <registry>/<repo-path>/<image>:<tag> <target-repo> --build-name <build-name> --build-number <build-number>Where:
<registry>is your Artifactory Docker registry (for example,my-docker-registry.io)<repo-path>is the repository sub-path within the registry (for example,my-repo)<image>:<tag>is the Docker image name and tag (for example,my-docker-image:latest)<target-repo>is the target repository in Artifactory (for example,docker-local)
For example:
jf rt podman-push my-docker-registry.io/my-repo/my-docker-image:latest docker-local --build-name my-build-name --build-number 7Expected output
On success, the command prints the pushed image layers and build-info collection status:
[Info] Pushing image: my-docker-registry.io/my-repo/my-docker-image:latest
[Info] Build info successfully collected for build my-build-name/7
Pushing Docker Images Using Kaniko
JFrog CLI allows pushing containers to Artifactory using Kaniko, while collecting build-info and storing it in Artifactory.
The Kaniko workflow uses the jf rt build-docker-create command (jf rt bdc) to attach the already-built and pushed image to the build-info after Kaniko completes the push.
To push Docker images using Kaniko:
-
Run Kaniko to build and push the image to Artifactory, capturing the image digest.
-
Write the image reference to a file in the format
<IMAGE-TAG>@sha256:<MANIFEST-SHA256>. -
Run
jf rt bdcto add the image to the build-info:jf rt bdc <target-repo> --image-file <path-to-image-file> --build-name <build-name> --build-number <build-number> -
Publish the build-info with
jf rt build-publish.
For a complete setup including the Kaniko container configuration and Dockerfile, refer to the Kaniko project example on GitHub.
Pushing Docker Images Using buildx
JFrog CLI allows pushing containers to Artifactory using buildx, while collecting build-info and storing it in Artifactory.
The buildx workflow uses docker buildx build --push to build and push a multi-platform (fat manifest) image to Artifactory, then attaches it to the build-info using jf rt bdc.
To push Docker images using buildx:
-
Run
docker buildx build --pushtargeting your Artifactory registry, capturing the image digest. -
Write the image reference to a file in the format
<IMAGE-TAG>@sha256:<MANIFEST-SHA256>. -
Run
jf rt bdcto add the image to the build-info:jf rt bdc <target-repo> --image-file <path-to-image-file> --build-name <build-name> --build-number <build-number> -
Publish the build-info with
jf rt build-publish.
For a complete setup including multi-platform build configuration, refer to the buildx project example on GitHub.
Pushing Docker Images Using the OpenShift CLI
JFrog CLI allows pushing containers to Artifactory using the OpenShift CLI, while collecting build-info and storing it in Artifactory.
The OpenShift workflow uses OpenShift's native build system (oc start-build) to push images to Artifactory, then attaches the result to the build-info using jf rt bdc.
To push Docker images using the OpenShift CLI:
-
Configure your OpenShift
BuildConfigto push to your Artifactory Docker registry. -
Trigger the build with
oc start-build, capturing the resulting image digest. -
Write the image reference to a file in the format
<IMAGE-TAG>@sha256:<MANIFEST-SHA256>. -
Run
jf rt bdcto add the image to the build-info:jf rt bdc <target-repo> --image-file <path-to-image-file> --build-name <build-name> --build-number <build-number> -
Publish the build-info with
jf rt build-publish.
For a complete setup including the OpenShift BuildConfig and pipeline integration, refer to the OpenShift build project example on GitHub.
Adding Published Docker Images to the Build-Info
The build-docker-create command allows adding a docker image that is already published to Artifactory into the build-info.
To add a published Docker image to the build-info:
- Write the image reference (including digest) to a file (see Example below).
- Run
jf rt bdcwith the target repository,--image-file, and optional build-info flags.
| Parameter | Description |
|---|---|
| Command-name | rt build-docker-create |
| Abbreviation | rt bdc |
--image-file | Path to a file containing: IMAGE-TAG@sha256:MANIFEST-SHA256 |
--server-id | [Optional] Server ID |
--build-name | [Optional] Build name |
--build-number | [Optional] Build number |
--project | [Optional] JFrog project key |
--module | [Optional] Module name for build-info |
--threads | [Default: 3] Number of working threads |
| Target repository | The repository to which the image was pushed |
If your Docker image has multiple tags pointing to the same digest, provide them in comma-separated format in the --image-file.
Example
Create the image file first:
echo "<registry>/<repo-path>/<image>:<tag>@sha256:<manifest-sha256>" > image-file-details.txtThen run:
jf rt bdc docker-local --image-file image-file-details.txt --build-name myBuild --build-number 1Expected output
On success:
[Info] Build info successfully created
Promoting Docker Images
The docker-promote command moves or copies a Docker image from one repository to another in Artifactory.
To promote a Docker image between repositories:
- Identify the source image name, source repository, and target repository in Artifactory.
- Run
jf rt docker-promote(orjf rt dpr) with those arguments and optional flags (see Example below).
| Parameter | Description |
|---|---|
| Command-name | rt docker-promote |
| Abbreviation | rt dpr |
--server-id | [Optional] Server ID |
--copy | [Default: false] Copy instead of move |
--source-tag | [Optional] Tag name to promote |
--target-docker-image | [Optional] Docker target image name |
--target-tag | [Optional] Target tag to assign after promotion |
| Source docker image | The docker image name to promote |
| Source repository | Source repository in Artifactory |
| Target repository | Target repository in Artifactory |
Example
jf rt docker-promote hello-world docker-dev-local docker-staging-localExpected output
On success:
[Info] Promoting image hello-world from docker-dev-local to docker-staging-local
[Info] Docker image promotion completed successfully
Note
The
jf rt docker-promotecommand currently requires the source and target repositories to be different. It does not support promoting a Docker image to the same repository while assigning a different target image name.
Note
The
--projectflag is not supported bydocker-promote. To scope build-info by project, use--projecton thebuild-publishcommand instead.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
podman login failed / must provide --username with --password-stdin | Server uses a reference token (non-JWT); Podman requires basic auth | Add --user <artifactory-username> to the podman-pull or podman-push command, or pre-login: podman login <registry> --username <user> --password <token> |
podman image must be in the form: registry-domain/path-in-repository/image-name:version | Image tag is missing the repository sub-path | Use the three-component format: <registry>/<repo-path>/<image>:<tag> (for example, my-registry.io/my-repo/my-image:latest) |
| Podman push/pull 401 errors | Authentication not configured for Podman | Run podman login <registry-url> or use --server-id |
build-docker-create fails | Image file format is incorrect | Ensure the file contains IMAGE-TAG@sha256:MANIFEST-SHA256 |
docker-promote fails with same source and target repository | Same-repository promotion is not supported | Use different source and target repositories |
| Kaniko/buildx integration issues | Configuration not set up correctly | Refer to the project examples linked above for step-by-step instructions |
Enable debug logging: export JFROG_CLI_LOG_LEVEL=DEBUG
Related Topics
- Build Tools Overview — Capabilities matrix and tool reference
- Native Mode — Supported packages with Native Mode
Updated about 1 month ago
