---
title: "Docker Image"
description: "pull Docker image files to scan for symbol content"
source: "https://github.com/log-10x/modules/tree/main/pipelines/compile/modules/pull/docker/module.yaml"
icon: "material/docker"

---
Pulls Docker images from container registries for [compile](https://doc.log10x.com/compile/) pipeline [scanning](https://doc.log10x.com/compile/scan/ "Capture symbol values from source code/binary files and link to an output symbol library") of source code, binaries, and configuration.

Only downloads images when their SHA256 hash differs from previously scanned [symbol files](https://doc.log10x.com/compile/scanner/symbol/ "Discover existing symbol unit files to reuse").

!!! tenx-docker "Docker CLI"

    Requires [docker CLI](https://github.com/docker/cli) for authentication and export. Install locally or use the compiler [Docker image](https://doc.log10x.com/install/docker/).

Executed CLI commands:

```bash

# check the docker cli client is available
docker version 

# check whether target image exists and its hash has not already been scanned
docker inspect manifest <image>

# create the container locally 
docker create <image>

# export the container to a .tar file
docker export <containerID> <temp-file-to-scan.tar>

# stop the container and remove the image from disk
docker stop <containerID>
docker rmi <containerID>
```

## :material-wrench-outline: Config Files

To configure the Docker image module, [:material-cog: Edit](https://doc.log10x.com/config/app/#module-config "Learn how to edit app and module configurations") these files.  

Below is the default configuration from: [docker/config.yaml](https://github.dev/log-10x/config/blob/main/pipelines/compile/pull/docker/config.yaml "docker/config.yaml"){target="\_blank"} (<span class="tenx-tooltip" data-tooltip="The config file below contains required fields to activate this module, marked with &#10071;">** Required Fields*</span>).  
  
<div class="edit-options">
    <a class="md-button tenx-edit-online-button" data-tooltip="Edit online on github.dev" href="https://github.dev/log-10x/config/blob/main/pipelines/compile/pull/docker/config.yaml" target="_blank" rel="noopener noreferrer">
        <span class="twemoji" style="margin-right: 0.3rem;">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
            </svg>
        </span> Edit Online
    </a>
    <button class="md-button tenx-config.yaml0-edit-button" data-tooltip="Edit configuration file" data-dialog-id="config-yaml0-dialog">
        <span style="margin-right: 0.3rem;">
            <span class="twemoji">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                </svg>
            </span>
        </span>Edit Locally
    </button>
</div>

<dialog id="config-yaml0-dialog" class="md-dialog md-dialog--editor">
    <div class="editor-dialog-wrapper">
        <div class="editor-dialog-header">
            <span class="editor-dialog-title">Edit config.yaml Locally</span>
            <div class="editor-header-actions">
                <button class="editor-toolbar-btn yaml-editor-locations" data-tooltip="Save">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path></svg>
                </button>
                <button class="editor-toolbar-btn yaml-editor-reset" data-tooltip="Reset to default">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M12.5 8c-2.65 0-5.05 1-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"></path></svg>
                </button>
                <button class="editor-toolbar-btn yaml-editor-copy" data-tooltip="Copy to clipboard">
                    <svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path></svg>
                    <svg class="icon-check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg>
                </button>
                <span class="header-divider"></span>
                <button class="editor-toolbar-btn yaml-editor-fullscreen" data-tooltip="Fullscreen">
                    <svg class="icon-maximize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z"></path></svg>
                    <svg class="icon-minimize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M5,16H8V19H10V14H5V16M14,14V19H16V16H19V14H14M16,5V8H19V10H14V5H16M10,5V10H5V8H8V5H10Z"></path></svg>
                </button>
                <span class="header-divider"></span>
                <button class="editor-toolbar-btn editor-dialog-close" onclick="closeDialog('config-yaml0-dialog')" data-tooltip="Close">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path></svg>
                </button>
            </div>
        </div>
        <div class="editor-dialog-content">
            <div class="yaml-editor-container"></div>
        </div>
        <div class="yaml-editor-statusbar">
            <span class="yaml-editor-status"></span>
        </div>
    </div>
    <!-- Locations Popup -->
    <div class="locations-popup" style="display: none;">
        <div class="locations-popup-content">
            <div class="locations-popup-header">
                <span class="locations-header-label">Download and save to:</span>
                <button class="locations-popup-close" aria-label="Close">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
                        <path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path>
                    </svg>
                </button>
            </div>
            <ul class="locations-list">
                <li>
                    <span class="location-label">Linux / Docker / macOS
                        <span class="help-icon" data-tooltip="Default system location. The engine automatically reads configs from here at startup. Best for production deployments.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="default-path location-path" data-tooltip=""
                            data-copy-osx="/etc/log10x/config/compile/pull/docker/config.yaml"
                            data-copy-nix="/etc/log10x/config/compile/pull/docker/config.yaml"
                            data-copy-win="C:\log10x\configs/compile/pull/docker/config.yaml"></code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
                <li>
                    <span class="location-label">Custom directory
                        <span class="help-icon" data-tooltip="Set TENX_CONFIG environment variable to point to a custom config directory. Useful when you want configs in a non-standard location.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="location-path" data-tooltip="$TENX_CONFIG/compile/pull/docker/config.yaml">$TENX_CONFIG/compile/pull/docker/config.yaml</code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
                <li>
                    <span class="location-label">Within cloned repo
                        <span class="help-icon" data-tooltip="First run: git clone github.com/log-10x/config. Then save the file to this path within the cloned folder. Use for version control.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="location-path" data-tooltip="./pipelines/compile/pull/docker/config.yaml">./pipelines/compile/pull/docker/config.yaml</code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
            </ul>
            <div class="locations-popup-footer">
                <button class="locations-download-btn" title="Download config file">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                        <path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path>
                    </svg>
                    <span>Download</span>
                </button>
            </div>
        </div>
    </div>
</dialog>

<template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZG9ja2VyIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJpbWFnZXMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRvY2tlciBpbWFnZSBmaWxlcyB0byBwdWxsXG5cblNwZWNpZmllcyB0aGUgVVJMcyBmb3IgdGhlIHJlbW90ZSBEb2NrZXIgaW1hZ2VzIHRvIHB1bGwgaW4gdGhlIGZvcm0gb2Y6IGA8Y29udGFpbmVyLXJlcG9zaXRvcnk+LzxpbWFnZT4vPHZlcnNpb24+YC4gRm9yIGV4YW1wbGU6ICBgYGAgeWFtbCAgZG9ja2VySW1hZ2VzOiAtIGRvY2tlci5pby9ncmFmYW5hL2dyYWZhbmE6MTEuMS4wIGBgYCIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInVzZXJuYW1lIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEb2NrZXIgdXNlciBuYW1lXG5cblNwZWNpZmllcyB0aGUgW3VzZXIgbmFtZV0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvbG9naW4vI3VzZXJuYW1lKSBmb3IgYXV0aGVudGljYXRpbmcgdGhlIGRvY2tlciBjbGllbnQuIElmIHRoaXMgdmFsdWUgaXMgbm90IHNldCwgdGhlIGRvY2tlciBjbGllbnQgaXMgYXNzdW1lZCB0byBiZSBwcmUtYXV0aGVudGljYXRlZC4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNldCB2aWEgYW4gW2Vudmlyb25tZW50IHZhcmlhYmxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpOiAgYGBgIHlhbWwgZG9ja2VyVXNlcm5hbWU6ICQ9VGVuWEVudi5nZXQoXCJET0NLRVJfVVNFUk5BTUVcIikgYGBgIgogICAgICAgIH0sCiAgICAgICAgInBhc3N3b3JkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEb2NrZXIgcGFzc3dvcmRcblxuU3BlY2lmaWVzIHRoZSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpbmcgdGhlIGRvY2tlciBjbGllbnQgaW4gY29uanVuY3Rpb24gd2l0aCBbZG9ja2VyVXNlcm5hbWVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2RvY2tlci8jZG9ja2VydXNlcm5hbWUpLiBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9ja2VyIGNsaWVudCdzIHN0ZCBpbnB1dCB2aWEgdGhlIGxvZ2luIGNvbW1hbmQncyBbcGFzc3dvcmQtc3RkaW5dKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL3JlZmVyZW5jZS9jbGkvZG9ja2VyL2xvZ2luLyNwYXNzd29yZC1zdGRpbikgYXJndW1lbnQuICBUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdmlhIGFuIFtlbnZpcm9ubWVudCB2YXJpYWJsZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhFbnYuZ2V0KTogIGBgYCB5YW1sIGRvY2tlclBhc3N3b3JkOiAkPVRlblhFbnYuZ2V0KFwiRE9DS0VSX1RPS0VOXCIpIGBgYCIKICAgICAgICB9LAogICAgICAgICJyZW1vdmUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3ZlIGltYWdlIGFmdGVyIHNjYW5cblxuU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmVtb3ZlIFtkb2NrZXJJbWFnZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2RvY2tlci8jZG9ja2VyaW1hZ2VzKSB1c2luZyBbZG9ja2VyIHJtaSAtZl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvaW1hZ2Uvcm0vKSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogdHJ1ZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgImdpdGh1YlJlcG9Ub2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiR2l0SHViIEFQSSB0b2tlbiBmb3IgcHVsbGluZyBpbWFnZSBzb3VyY2UgY29kZSByZXBvc2l0b3JpZXNcblxuRGVmaW5lcyBhbiBhY2Nlc3MgdG9rZW4gZm9yIHB1bGxpbmcgW0dpdGh1YiByZXBvc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvZ2l0aHViLykgcmVmZXJlbmNlZCBieSBhIHRhcmdldCBpbWFnZSdzIFtvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlXShodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvbnRhaW5lcnMvaW1hZ2Utc3BlYy9ibG9iL3YxLjAuMS9hbm5vdGF0aW9ucy5tZCNwcmUtZGVmaW5lZC1hbm5vdGF0aW9uLWtleXMpIHByb3BlcnR5LiAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGUgW2ltYWdlIG1hbmlmZXN0XShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9yZWZlcmVuY2UvY2xpL2RvY2tlci9tYW5pZmVzdC9pbnNwZWN0KSwgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGluZmVyIGEgdmFsaWQgR2l0SHViIHJlcG8gbmFtZSBmcm9tIHRoZSBpbWFnZSBuYW1lLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSB0aGUgdGFyZ2V0IGltYWdlIG5hbWU6IGBkb2NrZXIuaW8vZ3JhZmFuYS9ncmFmYW5hOjExLjEuMGAsIHRoZSBbZ3JhZmFuYS9ncmFmYW5hXShodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hKSBHaXRIdWIgcmVwbyBpcyBpbmZlcnJlZC4gIElmIG5vdCBhbiBBUEkgdG9rZW4gaXMgbm90IHNwZWNpZmllZCwgR2l0SHViIHJlcG9zIHJlZmVyZW5jZWQgd2l0aGluIGltYWdlIG1hbmlmZXN0cyBvciBpbmZlcnJlZCBmcm9tIGltYWdlIG5hbWVzIGFyZSBub3QgcHVsbGVkLiBUbyBsZWFybiBtb3JlIHNlZSBbR2l0SHViIHRva2Vuc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYXV0aGVudGljYXRpb24va2VlcGluZy15b3VyLWFjY291bnQtYW5kLWRhdGEtc2VjdXJlL21hbmFnaW5nLXlvdXItcGVyc29uYWwtYWNjZXNzLXRva2VucykuIgogICAgICAgIH0sCiAgICAgICAgImNvbW1hbmQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gZG9ja2VyIGNvbW1hbmRcblxuRGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgW2RvY2tlcl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvKSBwcm9ncmFtIHVzZWQgcHVsbGluZyBhbmQgZXhwb3J0aW5nIGltYWdlcy4gKERlZmF1bHQ6ICpOSVg6IC91c3IvbG9jYWwvYmluL2RvY2tlciwgV2luOiBDOi9Qcm9ncmFtIEZpbGVzL0RvY2tlci9Eb2NrZXIvcmVzb3VyY2VzL2Jpbi9kb2NrZXIuZXhlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiKk5JWDogL3Vzci9sb2NhbC9iaW4vZG9ja2VyLCBXaW46IEM6L1Byb2dyYW0gRmlsZXMvRG9ja2VyL0RvY2tlci9yZXNvdXJjZXMvYmluL2RvY2tlci5leGUiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==</template>

```yaml
# 🔟❎ 'compile' Docker configuration

# Pull docker images files using the Docker CLI client from container registries to
# scan for symbol values. To learn more see https://doc.log10x.com/compile/pull/docker

# Set the 10x pipeline to 'compile'
tenx: compile

# ============================= Docker Options ================================

docker:

  # 'username' specifies the  user name for authenticating the docker client.
  #  If not set, the docker client is assumed to be pre-authenticated.
  #  To learn more see https://docs.docker.com/reference/cli/docker/login/#username
  username: $=TenXEnv.get("DOCKER_USERNAME") # (❗ EnvVar REQUIRED)

  # 'password' specifies the password argument for authenticating the docker client login command.
  #  This value is written into the docker client's std input via the --password-stdin argument.
  #  To learn more see https://docs.docker.com/reference/cli/docker/login/#password-stdin.
  password: $=TenXEnv.get("DOCKER_TOKEN")  # (❗ EnvVar REQUIRED)

  # 'command' specifies the location of docker cli https://docs.docker.com/reference/cli/docker/ program
  #command: $=TenXString.includes(TenXEnv.get("os.name"), "Windows") ? "C:/Program Files/Docker/Docker/resources/bin/docker.exe":"/usr/local/bin/docker"

  # 'images' specify images to pull and export to matching .tar files to scan
  images: [
  #   docker.io/grafana/grafana:11.1.0 
  ]

  # 'remove' specifies whether to remove exported images once their contents are extracted.
  #  To learn more see https://docs.docker.com/reference/cli/docker/image/rm
  remove: false

  # 'githubRepoToken' defines an access token for pulling Github repos referenced
  # by a target image's 'org.opencontainers.image.source' property.
  githubRepoToken: $=TenXEnv.get("GH_TOKEN")  # (❗ EnvVar REQUIRED)
```

## :material-menu: Options

Specify the options below to [configure](/config "configure") the Docker image:

|Name|Description|
|---|---|
|[dockerImages](#dockerimages "Docker image files to pull")|Docker image files to pull|
|[dockerUsername](#dockerusername "docker user name")|Docker user name|
|[dockerPassword](#dockerpassword "docker password")|Docker password|
|[dockerRemove](#dockerremove "remove image after scan")|Remove image after scan|
|[dockerGithubRepoToken](#dockergithubrepotoken "GitHub API token for pulling image source code repositories")|GitHub API token for pulling image source code repositories|
|[dockerCommand](#dockercommand "path to docker command")|Path to docker command|

### :material-menu-right-outline:**`dockerImages`**

Docker image files to pull.

|Type|Default|
|---|---|
|List|\[\]|

specifies the URLs for the remote Docker images to pull in the form of: `<container-repository>/<image>/<version>`.

For example:

```yaml
dockerImages:
- docker.io/grafana/grafana:11.1.0
```


### :material-menu-right-outline:**`dockerUsername`**

Docker user name.

|Type|Default|
|---|---|
|String|""|

specifies the [user name](https://docs.docker.com/reference/cli/docker/login/#username){target="\_blank"} for authenticating the docker client.
If this value is not set, the docker client is assumed to be pre-authenticated.

This value should be set via an [environment variable](https://doc.log10x.com/api/js/#TenXEnv.get):

```yaml
dockerUsername: $=TenXEnv.get("DOCKER_USERNAME")
```


### :material-menu-right-outline:**`dockerPassword`**

Docker password.

|Type|Default|
|---|---|
|String|""|

specifies the password for authenticating the docker client in conjunction with [dockerUsername](https://doc.log10x.com/compile/pull/docker/#dockerusername "docker user name").

This value is written into the docker client's std input via the login command's [password-stdin](https://docs.docker.com/reference/cli/docker/login/#password-stdin){target="\_blank"} argument.

This value should be set via an [environment variable](https://doc.log10x.com/api/js/#TenXEnv.get):

```yaml
dockerPassword: $=TenXEnv.get("DOCKER_TOKEN")
```


### :material-menu-right-outline:**`dockerRemove`**

Remove image after scan.

|Type|Default|
|---|---|
|Boolean|true|

Specifies whether to remove [dockerImages](https://doc.log10x.com/compile/pull/docker/#dockerimages "Docker image files to pull") using [docker rmi -f](https://docs.docker.com/reference/cli/docker/image/rm/){target="\_blank"}.


### :material-menu-right-outline:**`dockerGithubRepoToken`**

GitHub API token for pulling image source code repositories.

|Type|Default|
|---|---|
|String|""|

Defines an access token for pulling [Github repos](https://doc.log10x.com/compile/pull/github/ "Pull folders from GitHub repositories to scan for symbol content") referenced
by a target image's [org.opencontainers.image.source](https://github.com/opencontainers/image-spec/blob/v1.0.1/annotations.md#pre-defined-annotation-keys){target="\_blank"} property.

If this property is not available within the [image manifest](https://docs.docker.com/reference/cli/docker/manifest/inspect){target="\_blank"},
an attempt is made to infer a valid GitHub repo name from the image name.
For example, for the the target image name: `docker.io/grafana/grafana:11.1.0`, the [grafana/grafana](https://github.com/grafana/grafana){target="\_blank"} GitHub repo is inferred.

If not an API token is not specified, GitHub repos referenced within image manifests or inferred from image names are not pulled.
To learn more see [GitHub tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens){target="\_blank"}.


### :material-menu-right-outline:**`dockerCommand`**

Path to docker command.

|Type|Default|
|---|---|
|String|\*NIX: /usr/local/bin/docker, Win: C:/Program Files/Docker/Docker/resources/bin/docker.exe|

Defines the path to the [docker](https://docs.docker.com/reference/cli/docker/){target="\_blank"} program used pulling and exporting images.


<br/>:material-github: This module is defined in [docker/module.yaml](https://github.com/log-10x/modules/tree/main/pipelines/compile/modules/pull/docker/module.yaml "docker/module.yaml"){target="\_blank"}.

