Provided by: podman_3.4.4+ds1-1ubuntu1.22.04.3_amd64 bug

NAME

       oci-hooks - OCI hooks configuration directories

SYNOPSIS

       /usr/share/containers/oci/hooks.d/*.json

DESCRIPTION

       Provides a way for users to configure the intended hooks for Open Container Initiative containers so they
       will  only  be  executed for containers that need their functionality, and then only for the stages where
       they're needed.

Directories

       Hooks are configured with JSON files (ending with a .json extension) in a  series  of  hook  directories.
       The  default  directory  is /usr/share/containers/oci/hooks.d, but tools consuming this format may change
       that default, include  additional  directories,  or  provide  their  callers  with  ways  to  adjust  the
       configuration directories.

       If  multiple  directories are configured, a JSON filename in a preferred directory masks entries with the
       same filename in directories with lower precedence.  For example, if a consuming tool watches  for  hooks
       in /etc/containers/oci/hooks.d and /usr/share/containers/oci/hooks.d (in order of decreasing precedence),
       then  a  hook  definition  in  /etc/containers/oci/hooks.d/01-my-hook.json  will  mask  any definition in
       /usr/share/containers/oci/hooks.d/01-my-hook.json.

       Tools consuming this format may also opt to monitor the hook directories for changes, in which case  they
       will  notice  additions, changes, and removals to JSON files without needing to be restarted or otherwise
       signaled.  When the tool monitors multiple hooks directories, the precedence discussed  in  the  previous
       paragraph    still    applies.    For   example,   if   a   consuming   tool   watches   for   hooks   in
       /etc/containers/oci/hooks.d and /usr/share/containers/oci/hooks.d (in order  of  decreasing  precedence),
       then  writing  a  new  hook  definition to /etc/containers/oci/hooks.d/01-my-hook.json will mask the hook
       previously  loaded  from  /usr/share/containers/oci/hooks.d/01-my-hook.json.    Subsequent   changes   to
       /usr/share/containers/oci/hooks.d/01-my-hook.json  will  have  no effect on the consuming tool as long as
       /etc/containers/oci/hooks.d/01-my-hook.json exists.  Removing /etc/containers/oci/hooks.d/01-my-hook.json
       will reload the hook from /usr/share/containers/oci/hooks.d/01-my-hook.json.

       Hooks are injected in the order obtained by sorting the JSON file names, after converting them  to  lower
       case,  based on their Unicode code points.  For example, a matching hook defined in 01-my-hook.json would
       be injected before matching hooks defined in 02-another-hook.json and 01-UPPERCASE.json.  It is  strongly
       recommended to make the sort order unambiguous depending on an ASCII-only prefix (like the 01/02 above).

       Each JSON file should contain an object with one of the following schemas.

1.0.0 Hook Schema

       version (required string)
         Sets the hook-definition version.  For this schema version, the value be 1.0.0.

       hook (required object)
         The hook to inject, with the hook-entry schema defined by the 1.0.1 OCI Runtime Specification.

       when (required object)
         Conditions  under  which the hook is injected.  The following properties can be specified, and at least
       one must be specified:

              • always (optional boolean)
                  If set true, this condition matches.

              • annotations (optional object)
                  If all annotations key/value pairs match a key/value pair  from  the  configured  annotations,
                this condition matches.
                  Both keys and values must be POSIX extended regular expressions.

              • commands (optional array of strings)
                  If the configured process.args[0] matches an entry, this condition matches.
                  Entries must be POSIX extended regular expressions.

              • hasBindMounts (optional boolean)
                  If  hasBindMounts  is  true  and  the  caller  requested  host-to-container  bind mounts, this
                condition matches.

       stages (required array of strings)
         Stages when the hook must be injected.  Entries must be chosen from the 1.0.1 OCI Runtime Specification
       hook stages or from extension stages supported by the package consumer.

       If all of the conditions set in when match, then the hook must be injected for the stages set in stages.

0.1.0 Hook Schema

       hook (required string)
         Sets path in the injected hook.

       arguments (optional array of strings)
         Additional arguments to pass to the hook.  The injected hook's args is hook with arguments appended.

       stages (required array of strings)
         Stages when the hook must be injected.  stage is an allowed synonym for this property, but you must not
       set both stages and stage.  Entries must be chosen from the 1.0.1 OCI Runtime Specification  hook  stages
       or from extension stages supported by the package consumer.

       cmds (optional array of strings)
         The  hook  must  be  injected  if  the  configured process.args[0] matches an entry.  cmd is an allowed
       synonym for this property, but you must not set both cmds  and  cmd.   Entries  must  be  POSIX  extended
       regular expressions.

       annotations (optional array of strings)
         The  hook  must  be  injected  if an annotations entry matches a value from the configured annotations.
       annotation is an allowed synonym for this property, but you must not set both annotations and annotation.
       Entries must be POSIX extended regular expressions.

       hasbindmounts (optional boolean)
         The hook must be injected if hasBindMounts is true and  the  caller  requested  host-to-container  bind
       mounts.

EXAMPLE

1.0.0 Hook Schema

       The   following  configuration  injects  oci-systemd-hook  in  the  pre-start  and  post-stop  stages  if
       process.args[0] ends with /init or /systemd:

              $ cat /etc/containers/oci/hooks.d/oci-systemd-hook.json
              {
                "version": "1.0.0",
                "hook": {
                  "path": "/usr/libexec/oci/hooks.d/oci-systemd-hook"
                },
                "when": {
                  "commands": [".*/init$" , ".*/systemd$"]
                },
                "stages": ["prestart", "poststop"]
              }

       The following example injects oci-umount --debug in the pre-start stage if the container is configured to
       bind-mount host directories into the container.

              $ cat /etc/containers/oci/hooks.d/oci-umount.json
              {
                "version": "1.0.0",
                "hook": {
                  "path": "/usr/libexec/oci/hooks.d/oci-umount",
                  "args": ["oci-umount", "--debug"],
                },
                "when": {
                  "hasBindMounts": true
                },
                "stages": ["prestart"]
              }

       The  following  example  injects  nvidia-container-runtime-hook  prestart  with  particular   environment
       variables  in  the  pre-start  stage  if  the container is configured with an annotations entry whose key
       matches ^com\.example\.department$ and whose value matches .*fluid-dynamics.*.

              $ cat /etc/containers/oci/hooks.d/nvidia.json
              {
                "version": "1.0.0",
                "hook": {
                  "path": "/usr/sbin/nvidia-container-runtime-hook",
                  "args": ["nvidia-container-runtime-hook", "prestart"],
                  "env": [
                    "NVIDIA_REQUIRE_CUDA=cuda>=9.1",
                    "NVIDIA_VISIBLE_DEVICES=GPU-fef8089b"
                  ]
                },
                "when": {
                  "annotations": {
                    "^com\\.example\\.department$": ".*fluid-dynamics$"
                  }
                },
                "stages": ["prestart"]
              }

0.1.0 Hook Schema

       The  following  configuration  injects  oci-systemd-hook  in  the  pre-start  and  post-stop  stages   if
       process.args[0] ends with /init or /systemd:

              $ cat /etc/containers/oci/hooks.d/oci-systemd-hook.json
              {
                "cmds": [".*/init$" , ".*/systemd$"],
                "hook": "/usr/libexec/oci/hooks.d/oci-systemd-hook",
                "stages": ["prestart", "poststop"]
              }

       The following example injects oci-umount --debug in the pre-start stage if the container is configured to
       bind-mount host directories into the container.

              $ cat /etc/containers/oci/hooks.d/oci-umount.json
              {
                "hook": "/usr/libexec/oci/hooks.d/oci-umount",
                "arguments": ["--debug"],
                "hasbindmounts": true,
                "stages": ["prestart"]
              }

       The  following  example  injects  nvidia-container-runtime-hook  prestart  in  the pre-start stage if the
       container is configured with an annotations entry whose value matches .*fluid-dynamics.*.

              $ cat /etc/containers/oci/hooks.d/osystemd-hook.json
              {
                "hook": "/usr/sbin/nvidia-container-runtime-hook",
                "arguments": ["prestart"],
                "annotations: [".*fluid-dynamics.*"],
                "stages": ["prestart"]
              }

SEE ALSO

       oci-systemd-hook(1), oci-umount(1), locale(7)

              • OCI Runtime Specification, 1.0.1, POSIX-platform hooks

              • OCI Runtime Specification, 1.0.1, process

              • POSIX extended regular expressions (EREs)

Hooks                                                  OCI                                          oci-hooks(5)