2566c1
% CONTAINERS-REGISTRIES.CONF 5 System-wide registry configuration file
2566c1
% Brent Baude
2566c1
% Aug 2017
2566c1
2566c1
# NAME
2566c1
containers-registries.conf - Syntax of System Registry Configuration File
2566c1
2566c1
# DESCRIPTION
2566c1
The CONTAINERS-REGISTRIES configuration file is a system-wide configuration
2566c1
file for container image registries. The file format is TOML.
2566c1
2566c1
Container engines will use the `$HOME/.config/containers/registries.conf` if it exists, otherwise they will use `/etc/containers/registries.conf`
2566c1
2566c1
### GLOBAL SETTINGS
2566c1
2566c1
`unqualified-search-registries`
2566c1
: An array of _host_[`:`_port_] registries to try when pulling an unqualified image, in order.
2566c1
2566c1
`credential-helpers`
2566c1
: An array of default credential helpers used as external credential stores.  Note that "containers-auth.json" is a reserved value to use auth files as specified in containers-auth.json(5).  The credential helpers are set to `["containers-auth.json"]` if none are specified.
2566c1
2566c1
### NAMESPACED `[[registry]]` SETTINGS
2566c1
2566c1
The bulk of the configuration is represented as an array of `[[registry]]`
2566c1
TOML tables; the settings may therefore differ among different registries
2566c1
as well as among different namespaces/repositories within a registry.
2566c1
2566c1
#### Choosing a `[[registry]]` TOML table
2566c1
2566c1
Given an image name, a single `[[registry]]` TOML table is chosen based on its `prefix` field.
2566c1
2566c1
`prefix`: A prefix of the user-specified image name, i.e. using one of the following formats:
2566c1
  - _host_[`:`_port_]
2566c1
  - _host_[`:`_port_]`/`_namespace_[`/`_namespace_…]
2566c1
  - _host_[`:`_port_]`/`_namespace_[`/`_namespace_…]`/`_repo_
2566c1
  - _host_[`:`_port_]`/`_namespace_[`/`_namespace_…]`/`_repo_(`:`_tag|`@`_digest_)
2566c1
  - [`*.`]_host_
2566c1
2566c1
The user-specified image name must start with the specified `prefix` (and continue
2566c1
with the appropriate separator) for a particular `[[registry]]` TOML table to be
2566c1
considered; (only) the TOML table with the longest match is used. It can
2566c1
also include wildcarded subdomains in the format `*.example.com`.
2566c1
The wildcard should only be present at the beginning as shown in the formats
2566c1
above. Other cases will not work. For example, `*.example.com` is valid but
2566c1
`example.*.com`, `*.example.com/foo` and `*.example.com:5000/foo/bar:baz` are not.
2566c1
2566c1
As a special case, the `prefix` field can be missing; if so, it defaults to the value
2566c1
of the `location` field (described below).
2566c1
2566c1
#### Per-namespace settings
2566c1
2566c1
`insecure`
2566c1
: `true` or `false`.
2566c1
By default, container runtimes require TLS when retrieving images from a registry.
2566c1
If `insecure` is set to `true`, unencrypted HTTP as well as TLS connections with untrusted
2566c1
certificates are allowed.
2566c1
2566c1
`blocked`
2566c1
: `true` or `false`.
2566c1
If `true`, pulling images with matching names is forbidden.
2566c1
2566c1
#### Remapping and mirroring registries
2566c1
2566c1
The user-specified image reference is, primarily, a "logical" image name, always used for naming
2566c1
the image.  By default, the image reference also directly specifies the registry and repository
2566c1
to use, but the following options can be used to redirect the underlying accesses
2566c1
to different registry servers or locations (e.g. to support configurations with no access to the
2566c1
internet without having to change `Dockerfile`s, or to add redundancy).
2566c1
2566c1
`location`
2566c1
: Accepts the same format as the `prefix` field, and specifies the physical location
2566c1
of the `prefix`-rooted namespace.
2566c1
2566c1
By default, this equal to `prefix` (in which case `prefix` can be omitted and the
2566c1
`[[registry]]` TOML table can only specify `location`).
2566c1
2566c1
Example: Given
2566c1
```
2566c1
prefix = "example.com/foo"
2566c1
location = "internal-registry-for-example.net/bar"
2566c1
```
2566c1
requests for the image `example.com/foo/myimage:latest` will actually work with the
2566c1
`internal-registry-for-example.net/bar/myimage:latest` image.
2566c1
2566c1
With a `prefix` containing a wildcard in the format: "*.example.com" for subdomain matching,
2566c1
the location can be empty. In such a case,
2566c1
prefix matching will occur, but no reference rewrite will occur. The
2566c1
original requested image string will be used as-is. But other settings like
2566c1
`insecure` / `blocked` / `mirrors` will be applied to matching images.
2566c1
2566c1
Example: Given
2566c1
```
2566c1
prefix = "*.example.com"
2566c1
```
2566c1
requests for the image `blah.example.com/foo/myimage:latest` will be used
2566c1
as-is. But other settings like insecure/blocked/mirrors will be applied to matching images
2566c1
2566c1
`mirror`
2566c1
: An array of TOML tables specifying (possibly-partial) mirrors for the
2566c1
`prefix`-rooted namespace.
2566c1
2566c1
The mirrors are attempted in the specified order; the first one that can be
2566c1
contacted and contains the image will be used (and if none of the mirrors contains the image,
2566c1
the primary location specified by the `registry.location` field, or using the unmodified
2566c1
user-specified reference, is tried last).
2566c1
2566c1
Each TOML table in the `mirror` array can contain the following fields, with the same semantics
2566c1
as if specified in the `[[registry]]` TOML table directly:
2566c1
- `location`
2566c1
- `insecure`
2566c1
2566c1
`mirror-by-digest-only`
2566c1
: `true` or `false`.
2566c1
If `true`, mirrors will only be used during pulling if the image reference includes a digest.
2566c1
Referencing an image by digest ensures that the same is always used
2566c1
(whereas referencing an image by a tag may cause different registries to return
2566c1
different images if the tag mapping is out of sync).
2566c1
2566c1
Note that if this is `true`, images referenced by a tag will only use the primary
2566c1
registry, failing if that registry is not accessible.
2566c1
2566c1
*Note*: Redirection and mirrors are currently processed only when reading images, not when pushing
2566c1
to a registry; that may change in the future.
2566c1
2566c1
#### Short-Name Aliasing
2566c1
The use of unqualified-search registries entails an ambiguity as it is
2566c1
unclear from which registry a given image, referenced by a short name,
2566c1
may be pulled from.
2566c1
2566c1
As mentioned in the note at the end of this man page, using short names is
2566c1
subject to the risk of hitting squatted registry namespaces.  If the
2566c1
unqualified-search registries are set to `["registry1.com", "registry2.com"]`
2566c1
an attacker may take over a namespace of registry1.com such that an image may
2566c1
be pulled from registry1.com instead of the intended source registry2.com.
2566c1
2566c1
While it is highly recommended to always use fully-qualified image references,
2566c1
existing deployments using short names may not be easily changed.  To
2566c1
circumvent the aforementioned ambiguity, so called short-name aliases can be
2566c1
configured that point to a fully-qualified image
2566c1
reference.
2566c1
2566c1
Short-name aliases can be configured in the `[aliases]` table in the form of
2566c1
`"name"="value"` with the left-hand `name` being the short name (e.g., "image")
2566c1
and the right-hand `value` being the fully-qualified image reference (e.g.,
2566c1
"registry.com/namespace/image").  Note that neither "name" nor "value" can
2566c1
include a tag or digest.  Moreover, "name" must be a short name and hence
2566c1
cannot include a registry domain or refer to localhost.
2566c1
2566c1
When pulling a short name, the configured aliases table will be used for
2566c1
resolving the short name.  If a matching alias is found, it will be used
2566c1
without further consulting the unqualified-search registries list.  If no
2566c1
matching alias is found, the behavior can be controlled via the
2566c1
`short-name-mode` option as described below.
2566c1
2566c1
Note that tags and digests are stripped off a user-specified short name for
2566c1
alias resolution.  Hence, "image", "image:tag" and "image@digest" all resolve
2566c1
to the same alias (i.e., "image").  Stripped off tags and digests are later
2566c1
appended to the resolved alias.
2566c1
2566c1
Further note that drop-in configuration files (see containers-registries.conf.d(5))
2566c1
can override aliases in the specific loading order of the files.  If the "value" of
2566c1
an alias is empty (i.e., ""), the alias will be erased.  However, a given
2566c1
"name" may only be specified once in a single config file.
2566c1
2566c1
2566c1
#### Short-Name Aliasing: Modes
2566c1
2566c1
The `short-name-mode` option supports three modes to control the behaviour of
2566c1
short-name resolution.
2566c1
2566c1
* `enforcing`: If only one unqualified-search registry is set, use it as there
2566c1
  is no ambiguity.  If there is more than one registry and the user program is
2566c1
  running in a terminal (i.e., stdout & stdin are a TTY), prompt the user to
2566c1
  select one of the specified search registries.  If the program is not running
2566c1
  in a terminal, the ambiguity cannot be resolved which will lead to an error.
2566c1
2566c1
* `permissive`: Behaves as enforcing but does not lead to an error if the
2566c1
  program is not running in a terminal.  Instead, fallback to using all
2566c1
  unqualified-search registries.
2566c1
2566c1
* `disabled`: Use all unqualified-search registries without prompting.
2566c1
2566c1
If `short-name-mode` is not specified at all or left empty, default to the
2566c1
`permissive` mode.  If the user-specified short name was not aliased already,
2566c1
the `enforcing` and `permissive` mode if prompted, will record a new alias
2566c1
after a successful pull.  Note that the recorded alias will be written to
2566c1
`/var/cache/containers/short-name-aliases.conf` for root to have a clear
2566c1
separation between possibly human-edited registries.conf files and the
2566c1
machine-generated `short-name-aliases-conf`.  Note that `$HOME/.cache` is used
2566c1
for rootless users.  If an alias is specified in a
2566c1
`registries.conf` file and also the machine-generated
2566c1
`short-name-aliases.conf`, the `short-name-aliases.conf` file has precedence.
2566c1
2566c1
#### Normalization of docker.io references
2566c1
2566c1
The Docker Hub `docker.io` is handled in a special way: every push and pull
2566c1
operation gets internally normalized with `/library` if no other specific
2566c1
namespace is defined (for example on `docker.io/namespace/image`).
2566c1
2566c1
(Note that the above-described normalization happens to match the behavior of
2566c1
Docker.)
2566c1
2566c1
This means that a pull of `docker.io/alpine` will be internally translated to
2566c1
`docker.io/library/alpine`. A pull of `docker.io/user/alpine` will not be
2566c1
rewritten because this is already the correct remote path.
2566c1
2566c1
Therefore, to remap or mirror the `docker.io` images in the (implied) `/library`
2566c1
namespace (or that whole namespace), the prefix and location fields in this
2566c1
configuration file must explicitly include that `/library` namespace. For
2566c1
example `prefix = "docker.io/library/alpine"` and not `prefix =
2566c1
"docker.io/alpine"`. The latter would match the `docker.io/alpine/*`
2566c1
repositories but not the `docker.io/[library/]alpine` image).
2566c1
2566c1
### EXAMPLE
2566c1
2566c1
```
2566c1
unqualified-search-registries = ["example.com"]
2566c1
2566c1
[[registry]]
2566c1
prefix = "example.com/foo"
2566c1
insecure = false
2566c1
blocked = false
2566c1
location = "internal-registry-for-example.com/bar"
2566c1
2566c1
[[registry.mirror]]
2566c1
location = "example-mirror-0.local/mirror-for-foo"
2566c1
2566c1
[[registry.mirror]]
2566c1
location = "example-mirror-1.local/mirrors/foo"
2566c1
insecure = true
2566c1
```
2566c1
Given the above, a pull of `example.com/foo/image:latest` will try:
2566c1
    1. `example-mirror-0.local/mirror-for-foo/image:latest`
2566c1
    2. `example-mirror-1.local/mirrors/foo/image:latest`
2566c1
    3. `internal-registry-for-example.net/bar/image:latest`
2566c1
2566c1
in order, and use the first one that exists.
2566c1
2566c1
## VERSION 1 FORMAT - DEPRECATED
2566c1
VERSION 1 format is still supported but it does not support
2566c1
using registry mirrors, longest-prefix matches, or location rewriting.
2566c1
2566c1
The TOML format is used to build a simple list of registries under three
2566c1
categories: `registries.search`, `registries.insecure`, and `registries.block`.
2566c1
You can list multiple registries using a comma separated list.
2566c1
2566c1
Search registries are used when the caller of a container runtime does not fully specify the
2566c1
container image that they want to execute.  These registries are prepended onto the front
2566c1
of the specified container image until the named image is found at a registry.
2566c1
2566c1
Note that insecure registries can be used for any registry, not just the registries listed
2566c1
under search.
2566c1
2566c1
The `registries.insecure` and `registries.block` lists have the same meaning as the
2566c1
`insecure` and `blocked` fields in the current version.
2566c1
2566c1
### EXAMPLE
2566c1
The following example configuration defines two searchable registries, one
2566c1
insecure registry, and two blocked registries.
2566c1
2566c1
```
2566c1
[registries.search]
2566c1
registries = ['registry1.com', 'registry2.com']
2566c1
2566c1
[registries.insecure]
2566c1
registries = ['registry3.com']
2566c1
2566c1
[registries.block]
2566c1
registries = ['registry.untrusted.com', 'registry.unsafe.com']
2566c1
```
2566c1
2566c1
# NOTE: RISK OF USING UNQUALIFIED IMAGE NAMES
2566c1
We recommend always using fully qualified image names including the registry
2566c1
server (full dns name), namespace, image name, and tag
2566c1
(e.g., registry.redhat.io/ubi8/ubi:latest). When using short names, there is
2566c1
always an inherent risk that the image being pulled could be spoofed. For
2566c1
example, a user wants to pull an image named `foobar` from a registry and
2566c1
expects it to come from myregistry.com. If myregistry.com is not first in the
2566c1
search list, an attacker could place a different `foobar` image at a registry
2566c1
earlier in the search list. The user would accidentally pull and run the
2566c1
attacker's image and code rather than the intended content. We recommend only
2566c1
adding registries which are completely trusted, i.e. registries which don't
2566c1
allow unknown or anonymous users to create accounts with arbitrary names. This
2566c1
will prevent an image from being spoofed, squatted or otherwise made insecure.
2566c1
If it is necessary to use one of these registries, it should be added at the
2566c1
end of the list.
2566c1
2566c1
It is recommended to use fully-qualified images for pulling as
2566c1
the destination registry is unambiguous. Pulling by digest
2566c1
(i.e., quay.io/repository/name@digest) further eliminates the ambiguity of
2566c1
tags.
2566c1
2566c1
# SEE ALSO
2566c1
 containers-auth.json(5) containers-certs.d(5)
2566c1
2566c1
# HISTORY
2566c1
Dec 2019, Warning added for unqualified image names by Tom Sweeney <tsweeney@redhat.com>
2566c1
2566c1
Mar 2019, Added additional configuration format by Sascha Grunert <sgrunert@suse.com>
2566c1
2566c1
Aug 2018, Renamed to containers-registries.conf(5) by Valentin Rothberg <vrothberg@suse.com>
2566c1
2566c1
Jun 2018, Updated by Tom Sweeney <tsweeney@redhat.com>
2566c1
2566c1
Aug 2017, Originally compiled by Brent Baude <bbaude@redhat.com>