Provided by: golang-github-containers-image_5.29.2-2_all bug

NAME

       containers-registries.conf - Syntax of System Registry Configuration File

DESCRIPTION

       The  CONTAINERS-REGISTRIES  configuration  file  is  a system-wide configuration file for container image
       registries. The file format is TOML.

       Container engines will use the $HOME/.config/containers/registries.conf if it exists, otherwise they will
       use /etc/containers/registries.conf

   GLOBAL SETTINGS
       unqualified-search-registries
              An array of host[:port] registries to try when pulling an unqualified image, in order.

       credential-helpers
              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.

   NAMESPACED [[registry]] SETTINGS
       The  bulk  of  the configuration is represented as an array of [[registry]] TOML tables; the settings may
       therefore differ among different registries as well as among different namespaces/repositories  within  a
       registry.

   Choosing a [[registry]] TOML table
       Given an image name, a single [[registry]] TOML table is chosen based on its prefix field.

       prefix: A prefix of the user-specified image name, i.e. using one of the following formats:
         - host[:port]
         - host[:port]/namespace[/_namespace_…]
         - host[:port]/namespace[/_namespace_…]/repo
         - host[:port]/namespace[/_namespace_…]/repo(:_tag|@digest)
         - [*.]host

       The  user-specified  image  name  must start with the specified prefix (and continue with the appropriate
       separator) for a particular [[registry]] TOML table to be considered; (only)  the  TOML  table  with  the
       longest  match  is  used.  It  can  also  include wildcarded subdomains in the format *.example.com.  The
       wildcard should only be present at the beginning as shown in the formats  above.  Other  cases  will  not
       work.    For    example,    *.example.com    is    valid   but   example.*.com,   *.example.com/foo   and
       *.example.com:5000/foo/bar:baz are  not.   Note  that  *  matches  an  arbitrary  number  of  subdomains.
       *.example.com will hence match bar.example.com, foo.bar.example.com and so on.

       As a special case, the prefix field can be missing; if so, it defaults to the value of the location field
       (described below).

   Per-namespace settings
       insecure
              true or false.  By default, container runtimes require TLS when retrieving images from a registry.
              If  insecure  is  set  to  true,  unencrypted  HTTP  as  well  as  TLS  connections with untrusted
              certificates are allowed.

       blocked
              true or false.  If true, pulling images with matching names is forbidden.

   Remapping and mirroring registries
       The user-specified image reference is, primarily, a "logical" image name,  always  used  for  naming  the
       image.   By  default, the image reference also directly specifies the registry and repository to use, but
       the following options can be used to redirect the underlying accesses to different  registry  servers  or
       locations  (e.g.  to  support  configurations  with  no  access  to the internet without having to change
       Dockerfiles, or to add redundancy).

       location
              Accepts the same format as the prefix field, and specifies the physical location  of  the  prefix-
              rooted namespace.

       By  default, this is equal to prefix (in which case prefix can be omitted and the [[registry]] TOML table
       can only specify location).

       Example: Given

       prefix = "example.com/foo"
       location = "internal-registry-for-example.com/bar"

       requests for the image example.com/foo/myimage:latest will actually work with the  internal-registry-for-
       example.com/bar/myimage:latest image.

       With  a  prefix containing a wildcard in the format: "*.example.com" for subdomain matching, the location
       can be empty. In such a case, prefix matching will occur,  but  no  reference  rewrite  will  occur.  The
       original  requested image string will be used as-is. But other settings like insecure / blocked / mirrors
       will be applied to matching images.

       Example: Given

       prefix = "*.example.com"

       requests for the image blah.example.com/foo/myimage:latest will be used as-is. But  other  settings  like
       insecure/blocked/mirrors will be applied to matching images

       mirror An  array  of  TOML  tables  specifying (possibly-partial) mirrors for the prefix-rooted namespace
              (i.e., the current [[registry]] TOML table).

       The mirrors are attempted in the specified order; the first one that can be contacted  and  contains  the
       image  will be used (and if none of the mirrors contains the image, the primary location specified by the
       registry.location field, or using the unmodified user-specified reference, is tried last).

       Each TOML table in the mirror array can contain the following fields:  -  location:  same  semantics  as
       specified  in  the  [[registry]]  TOML table - insecure: same semantics as specified in the [[registry]]
       TOML table - pull-from-mirror: all, digest-only or tag-only.  If "digest-only",  mirrors  will  only  be
       used  for  digest pulls. Pulling images by tag can potentially yield different images, depending on which
       endpoint we pull from.  Restricting mirrors to pulls by digest avoids that issue.  If "tag-only", mirrors
       will only be used for tag pulls.  For a more up-to-date and expensive mirror that it is less likely to be
       out of sync if tags move, it should not be unnecessarily used for digest references.   Default  is  "all"
       (or  left  empty),  mirrors will be used for both digest pulls and tag pulls unless the mirror-by-digest-
       only is set for the primary registry.  Note that this per-mirror setting is allowed only when  mirror-by-
       digest-only is not configured for the primary registry.

       mirror-by-digest-only
              true  or false.  If true, mirrors will only be used during pulling if the image reference includes
              a digest.  Note that if all mirrors are configured to be digest-only, images referenced by  a  tag
              will  only  use  the  primary  registry.   If  all  mirrors  are configured to be tag-only, images
              referenced by a digest will only use the primary registry.

       Referencing an image by digest ensures that the same is always used (whereas referencing an  image  by  a
       tag may cause different registries to return different images if the tag mapping is out of sync).

       Note:  Redirection and mirrors are currently processed only when reading a single image, not when pushing
       to a registry nor when doing any other kind of lookup/search on a on a registry.  This may change in  the
       future.

   Short-Name Aliasing
       The  use  of  unqualified-search  registries  entails an ambiguity as it is unclear from which registry a
       given image, referenced by a short name, may be pulled from.

       As mentioned in the note at the end of this man page, using short names is subject to the risk of hitting
       squatted registry  namespaces.   If  the  unqualified-search  registries  are  set  to  ["registry1.com",
       "registry2.com"]  an attacker may take over a namespace of registry1.com such that an image may be pulled
       from registry1.com instead of the intended source registry2.com.

       While it is highly recommended to always use fully-qualified image references, existing deployments using
       short names may not be easily changed.  To circumvent the aforementioned ambiguity, so called  short-name
       aliases can be configured that point to a fully-qualified image reference.

       Short-name  aliases can be configured in the [aliases] table in the form of "name"="value" with the left-
       hand name being the short name (e.g., "image") and the right-hand value being the  fully-qualified  image
       reference (e.g., "registry.com/namespace/image").  Note that neither "name" nor "value" can include a tag
       or  digest.  Moreover, "name" must be a short name and hence cannot include a registry domain or refer to
       localhost.

       When pulling a short name, the configured aliases table will be used for resolving the short name.  If  a
       matching  alias  is  found,  it will be used without further consulting the unqualified-search registries
       list.  If no matching alias is found, the behavior can be controlled via the  short-name-mode  option  as
       described below.

       Note  that  tags  and  digests are stripped off a user-specified short name for alias resolution.  Hence,
       "image", "image:tag" and "image@digest" all resolve to the same alias (i.e., "image").  Stripped off tags
       and digests are later appended to the resolved alias.

       Further note that drop-in configuration files (see containers-registries.conf.d(5)) can override  aliases
       in  the  specific  loading order of the files.  If the "value" of an alias is empty (i.e., ""), the alias
       will be erased.  However, a given "name" may only be specified once in a single config file.

   Short-Name Aliasing: Modes
       The short-name-mode option supports three modes to control the behaviour of short-name resolution.

              • enforcing: If only one unqualified-search registry is set, use it as there is no ambiguity.   If
                there  is  more  than one registry and the user program is running in a terminal (i.e., stdout &
                stdin are a TTY), prompt the user to select one of the  specified  search  registries.   If  the
                program  is  not  running  in a terminal, the ambiguity cannot be resolved which will lead to an
                error.

              • permissive: Behaves as enforcing but does not lead to an error if the program is not running  in
                a terminal.  Instead, fallback to using all unqualified-search registries.

              • disabled: Use all unqualified-search registries without prompting.

       If  short-name-mode  is not specified at all or left empty, default to the permissive mode.  If the user-
       specified short name was not aliased already, the enforcing and permissive mode if prompted, will  record
       a   new   alias   after   a   successful  pull.   Note  that  the  recorded  alias  will  be  written  to
       /var/cache/containers/short-name-aliases.conf for root to have a clear separation between possibly human-
       edited registries.conf files and the machine-generated short-name-aliases-conf.  Note  that  $HOME/.cache
       is  used  for  rootless  users.  If an alias is specified in a registries.conf file and also the machine-
       generated short-name-aliases.conf, the short-name-aliases.conf file has precedence.

   Normalization of docker.io references
       The Docker Hub docker.io is handled in a special way: every  push  and  pull  operation  gets  internally
       normalized   with   /library   if   no   other   specific   namespace   is   defined   (for   example  on
       docker.io/namespace/image).

       (Note that the above-described normalization happens to match the behavior of Docker.)

       This means that a pull of docker.io/alpine will be internally translated to  docker.io/library/alpine.  A
       pull of docker.io/user/alpine will not be rewritten because this is already the correct remote path.

       Therefore,  to  remap  or  mirror the docker.io images in the (implied) /library namespace (or that whole
       namespace), the prefix and location fields in  this  configuration  file  must  explicitly  include  that
       /library  namespace. For example prefix = "docker.io/library/alpine" and not prefix = "docker.io/alpine".
       The latter would match the docker.io/alpine/* repositories but not the docker.io/[library/]alpine image).

   EXAMPLE
       unqualified-search-registries = ["example.com"]

       [[registry]]
       prefix = "example.com/foo"
       insecure = false
       blocked = false
       location = "internal-registry-for-example.com/bar"

       [[registry.mirror]]
       location = "example-mirror-0.local/mirror-for-foo"

       [[registry.mirror]]
       location = "example-mirror-1.local/mirrors/foo"
       insecure = true

       [[registry]]
       location = "registry.com"

       [[registry.mirror]]
       location = "mirror.registry.com"

       Given the above, a pull of example.com/foo/image:latest will try:

                1. example-mirror-0.local/mirror-for-foo/image:latest

                2. example-mirror-1.local/mirrors/foo/image:latest

                3. internal-registry-for-example.com/bar/image:latest

       in order, and use the first one that exists.

       Note that a mirror is associated only with the current [[registry]] TOML  table.  If  using  the  example
       above,  pulling the image registry.com/image:latest will hence only reach out to mirror.registry.com, and
       the mirrors associated with example.com/foo will not be considered.

VERSION 1 FORMAT - DEPRECATED

       VERSION 1 format is still supported but it  does  not  support  using  registry  mirrors,  longest-prefix
       matches, or location rewriting.

       The  TOML  format is used to build a simple list of registries under three categories: registries.search,
       registries.insecure, and registries.block.  You can list multiple  registries  using  a  comma  separated
       list.

       Search  registries  are  used when the caller of a container runtime does not fully specify the container
       image that they want to execute.  These  registries  are  prepended  onto  the  front  of  the  specified
       container image until the named image is found at a registry.

       Note that insecure registries can be used for any registry, not just the registries listed under search.

       The  registries.insecure  and  registries.block  lists  have the same meaning as the insecure and blocked
       fields in the current version.

   EXAMPLE
       The following example configuration defines two searchable registries, one  insecure  registry,  and  two
       blocked registries.

       [registries.search]
       registries = ['registry1.com', 'registry2.com']

       [registries.insecure]
       registries = ['registry3.com']

       [registries.block]
       registries = ['registry.untrusted.com', 'registry.unsafe.com']

NOTE: RISK OF USING UNQUALIFIED IMAGE NAMES

       We  recommend  always  using  fully  qualified image names including the registry server (full dns name),
       namespace, image name, and tag (e.g., registry.redhat.io/ubi8/ubi:latest). When using short names,  there
       is  always  an  inherent  risk that the image being pulled could be spoofed. For example, a user wants to
       pull an image named foobar from a registry and expects it to come from myregistry.com. If  myregistry.com
       is  not  first in the search list, an attacker could place a different foobar image at a registry earlier
       in the search list. The user would accidentally pull and run the attacker's image and  code  rather  than
       the  intended  content. We recommend only adding registries which are completely trusted, i.e. registries
       which don't allow unknown or anonymous users to create accounts with arbitrary names. This  will  prevent
       an image from being spoofed, squatted or otherwise made insecure.  If it is necessary to use one of these
       registries, it should be added at the end of the list.

       It  is  recommended to use fully-qualified images for pulling as the destination registry is unambiguous.
       Pulling by digest (i.e., quay.io/repository/name@digest) further eliminates the ambiguity of tags.

SEE ALSO

       containers-auth.json(5) containers-certs.d(5)

HISTORY

       Dec  2019,  Warning  added   for   unqualified   image   names   by   Tom   Sweeney   tsweeney@redhat.commailto:tsweeney@redhat.com⟩

       Mar    2019,    Added    additional    configuration   format   by   Sascha   Grunert   sgrunert@suse.commailto:sgrunert@suse.com⟩

       Aug  2018,   Renamed   to   containers-registries.conf(5)   by   Valentin   Rothberg   vrothberg@suse.commailto:vrothberg@suse.com⟩

       Jun 2018, Updated by Tom Sweeney tsweeney@redhat.commailto:tsweeney@redhat.com⟩

       Aug 2017, Originally compiled by Brent Baude bbaude@redhat.commailto:bbaude@redhat.com⟩

registry                                           System-wide                     CONTAINERS-REGISTRIES.CONF(5)