cli/docs/reference/commandline/image_import.md

5.9 KiB
Raw Permalink Blame History

import

Import the contents from a tarball to create a filesystem image

Aliases

docker image import, docker import

Options

Name Type Default Description
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Set commit message for imported image
--platform string Set platform if server is multi-platform capable

Description

You can specify a URL or - (dash) to take data directly from STDIN. The URL can point to an archive (.tar, .tar.gz, .tgz, .bzip, .tar.xz, or .txz) containing a filesystem or to an individual file on the Docker host. If you specify an archive, Docker untars it in the container relative to the / (root). If you specify an individual file, you must specify the full path within the host. To import from a remote location, specify a URI that begins with the http:// or https:// protocol.

Examples

Import from a remote location

This creates a new untagged image.

$ docker import https://example.com/exampleimage.tgz

Import from a local file

Import to docker via pipe and STDIN.

$ cat exampleimage.tgz | docker import - exampleimagelocal:new

Import to docker from a local archive.

$ docker import /path/to/exampleimage.tgz

Import from a local directory

$ sudo tar -c . | docker import - exampleimagedir

Note the sudo in this example you must preserve the ownership of the files (especially root ownership) during the archiving with tar. If you are not root (or the sudo command) when you tar, then the ownerships might not get preserved.

Import with new configurations (-c, --change)

The --change option applies Dockerfile instructions to the image that is created. Not all Dockerfile instructions are supported; the list of instructions is limited to metadata (configuration) changes. The following Dockerfile instructions are supported:

The following example imports an image from a TAR-file containing a root-filesystem, and sets the DEBUG environment-variable in the resulting image:

$ docker import --change "ENV DEBUG=true" ./rootfs.tgz exampleimagedir

The --change option can be set multiple times to apply multiple Dockerfile instructions. The example below sets the LABEL1 and LABEL2 labels on the imported image, in addition to the DEBUG environment variable from the previous example:

$ docker import \
    --change "ENV DEBUG=true" \
    --change "LABEL LABEL1=hello" \
    --change "LABEL LABEL2=world" \
    ./rootfs.tgz exampleimagedir

Import with a commit message (-m, --message)

The --message (or -m) option allows you to set a custom comment in the image's metadata. The following example imports an image from a local archive and sets a custom message.

$ docker import --message "New image imported from tarball" ./rootfs.tgz exampleimagelocal:new
sha256:25e54c0df7dc49da9093d50541e0ed4508a6b78705057f1a9bebf1d564e2cb00

After importing, the message is set in the "Comment" field of the image's configuration, which is shown when viewing the image's history:

$ docker image history exampleimagelocal:new

IMAGE          CREATED         CREATED BY   SIZE      COMMENT
25e54c0df7dc   2 minutes ago                53.6MB    New image imported from tarball

When the daemon supports multiple operating systems

If the daemon supports multiple operating systems, and the image being imported does not match the default operating system, it may be necessary to add --platform. This would be necessary when importing a Linux image into a Windows daemon.

$ docker import --platform=linux .\linuximage.tar

Set the platform for the imported image (--platform)

The --platform option allows you to specify the platform for the imported image. By default, the daemon's native platform is used as platform, but the --platform option allows you to override the default, for example, in situations where the imported root filesystem is for a different architecture or operating system.

The platform option takes the os[/arch[/variant]] format; for example, linux/amd64 or linux/arm64/v8. Architecture and variant are optional, and default to the daemon's native architecture if omitted.

The following example imports an image from a root-filesystem in rootfs.tgz, and sets the image's platform to linux/amd64;

$ docker image import --platform=linux/amd64  ./rootfs.tgz imported:latest
sha256:44a8b44157dad5edcff85f0c93a3e455f3b20a046d025af4ec50ed990d7ebc09

After importing the image, the image's platform is set in the image's configuration;

$ docker image inspect --format '{{.Os}}/{{.Architecture}}' imported:latest
linux/amd64