Skip to content

Please provide the full config.toml configuration documentation #9457

Description

@balabalabutton

What is the problem you're trying to solve

I'm checking the containerd configuration, but the default configuration output using the command "containerd config" is very short. For example, I learned in other documents that there is a configuration such as [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.domain.com".tls], but I don't see it in the latest official version of the docs.

The overall docs can be said to be very scattered. Each block is partially written, but it also gives people a feeling of incomplete documentation. I saw the tls line of configuration in the old version, so is it because this configuration has not changed that it has not been written, or has it been removed so that it has not been written?
I can't be sure! So I hope that each version can have a full document, just like when helm deploys an application, the default values.yaml will comment on what the configuration is used for and what parameters are optional.

Describe the solution you'd like

Each version must provide complete config.toml configuration parsing, just like helm's values.yaml.
Or tell me where the complete documentation can be found.

Additional context

No response

Activity

  1. changed the title [-]Please provide the full config.toml configuration analysis.[/-] [+]Please provide the full config.toml configuration documentation[/+] on Jul 26, 2024
  2. dosubot commented on Nov 24, 2024

    @dosubot

    Hi, @yulinor. I'm Dosu, and I'm helping the containerd team manage their backlog. I'm marking this issue as stale.

    Issue Summary:

    • You requested more comprehensive documentation for the config.toml file in containerd.
    • Current documentation is perceived as fragmented and incomplete.
    • You are seeking explanations for all configuration options, similar to Helm's values.yaml.
    • Uncertainty exists about whether some configurations are removed or undocumented in the latest version.
    • No comments or activity have been made on this issue yet.

    Next Steps:

    • Please let us know if this issue is still relevant to the latest version of containerd by commenting here.
    • If there is no further activity, this issue will be automatically closed in 7 days.

    Thank you for your understanding and contribution!

  3. balabalabutton commented on Nov 28, 2024

    @balabalabutton
    Author

    It is still expected that a complete explanation of the config.toml configuration items will be provided in the latest version.

  4. DileepAP commented on Jan 9, 2025

    @DileepAP

    Hello Team, It will be good if a documentation is provided on setting up tls authentication to a image registry without the need of username/password or token. the ctr pull works with --tlscert & --tlskey, but unable to find relevant docs to set this up in hosts.toml or in containerd-template.toml

  5. added this to the 2.1 milestone on Jan 21, 2025
  6. 3 remaining items

  7. balabalabutton commented on Sep 24, 2025

    @balabalabutton
    Author

    Is man containerd-config.toml not enough? or not up to date? i'll double check but seems this is what you are looking for?man containerd-config.toml 还不够吗?还是不是最新的?我会仔细检查,但这似乎就是您要找的吗?

    https://github.com/containerd/containerd/blob/ad090e67e9d72fdce6259c51ff56d2df824b25cd/docs/man/containerd-config.8.md

    The current documentation of the project is more inclined to write an md for the common requirements of some modules, such as mirror acceleration, you can see hosts.md,https://github.com/containerd/containerd/blob/main/docs/hosts.md.
    In terms of split structure, this is indeed good.

    #9089
    Then I encountered the same problem as this qa, wondering what the role of this parameter runtime_type is. I searched some articles and there is no explanation about this configuration.
    Therefore, I prefer config.md to be similar to values.yaml in Helm packages.
    List the complete default configuration list, and then each plugin configuration block is referenced to the corresponding specialized md.
    At least I think it is not easy to find the configuration instructions of the plugin now.

  8. balabalabutton commented on Sep 24, 2025

    @balabalabutton
    Author

    Is man containerd-config.toml not enough? or not up to date? i'll double check but seems this is what you are looking for?man containerd-config.toml 还不够吗?还是不是最新的?我会仔细检查,但这似乎就是您要找的吗?
    https://github.com/containerd/containerd/blob/ad090e67e9d72fdce6259c51ff56d2df824b25cd/docs/man/containerd-config.8.md

    The current documentation of the project is more inclined to write an md for the common requirements of some modules, such as mirror acceleration, you can see hosts.md,https://github.com/containerd/containerd/blob/main/docs/hosts.md.目前项目文档更倾向于针对一些模块的常见需求写一个 md,比如镜像加速,可以看到 hosts.md,https://github.com/containerd/containerd/blob/main/docs/hosts.md。 In terms of split structure, this is indeed good.从拆分结构上来说,这确实不错。

    #9089 Then I encountered the same problem as this qa, wondering what the role of this parameter runtime_type is. I searched some articles and there is no explanation about this configuration.然后我遇到了和这个 qa 一样的问题,想知道这个参数 runtime_type 的作用是什么。 我搜索了一些文章,但没有关于这种配置的解释。 Therefore, I prefer config.md to be similar to values.yaml in Helm packages.因此,我更喜欢 config.md 类似于 Helm 包中的 values.yaml。 List the complete default configuration list, and then each plugin configuration block is referenced to the corresponding specialized md.列出完整的默认配置列表,然后每个插件配置块都引用相应的专用 md。 At least I think it is not easy to find the configuration instructions of the plugin now.至少我觉得现在要找到插件的配置说明并不容易。

    If the configuration explanation document can be separated, I think it will be very convenient for users, but it is quite troublesome for you.

  9. modified the milestones: 2.2, 2.3 on Nov 6, 2025
  10. kovan commented on Mar 26, 2026

    @kovan

    I looked into this and I think there's a structural challenge worth discussing before anyone writes a PR.

    The request is for a comprehensive config.toml reference, similar to Helm's annotated values.yaml. But containerd's plugin architecture makes this fundamentally different from Helm: plugins are loaded dynamically, each with its own config schema. A static doc listing every plugin option would be incomplete (it can't cover third-party or proxy plugins) and hard to maintain as plugins evolve independently.

    The previous PR #10920 attempted to merge CRI config into the man page, but it went stale partly because of this tension - AkihiroSuda raised concerns about scope and format.

    What would be feasible and useful:

    1. Expand the man page's explanation of how plugin configuration works - the [plugins."io.containerd.xxx.v1"] structure, how options map to plugin-specific Go structs, and how plugins not compiled in are silently ignored.
    2. Document containerd config default as the primary discovery tool - explain that this command outputs the full default config for all plugins compiled into the current binary, which is the authoritative reference for a given build.
    3. Add cross-references from the man page to per-plugin docs for the core plugins that ship with standard containerd (CRI, snapshotters, etc.), so users know where to look.

    This approach teaches users how to find config options for any plugin (including third-party ones) rather than trying to maintain a static list that will always be incomplete.

    Would maintainers be open to a PR with this scope? Happy to work on it if so.

  11. modified the milestones: 2.3, 2.4 on Apr 30, 2026
  12. tomatotomata commented on Jul 31, 2026

    @tomatotomata

    I was thinking of starting with a versioned reference for the current containerd config default output, then linking the plugin-specific sections that are already documented instead of trying to rewrite every option in one pass. The current tree has the man page plus CRI and plugin docs, but they do not line up as one complete reference. Would a first PR that documents the generated default config for the current 2.x line, with links out to plugin-specific details, fit the accepted scope?

  13. balabalabutton commented on Jul 31, 2026

    @balabalabutton
    Author

    I was thinking of starting with a versioned reference for the current containerd config default output, then linking the plugin-specific sections that are already documented instead of trying to rewrite every option in one pass. The current tree has the man page plus CRI and plugin docs, but they do not line up as one complete reference. Would a first PR that documents the generated default config for the current 2.x line, with links out to plugin-specific details, fit the accepted scope?我打算先为当前 containerd 配置的默认输出创建一个版本化的参考文档,然后将已有文档的插件特定部分链接到该参考文档中,而不是试图一次性重写所有选项。目前的代码树包含了 man 手册、CRI 和插件文档,但它们无法整合为一个完整的参考文档。如果第一个 PR 记录当前 2.x 版本生成的默认配置,并提供指向插件特定详细信息的链接,是否符合已接受的范围?

    I think there's no problem, and we can even encourage everyone to use containerd 2.

  14. modified the milestones: 2.4, 2.5 on Sep 16, 2026
  15. tomatotomata commented on Sep 16, 2026

    @tomatotomata

    @djdongjin, I was thinking of keeping a first pass focused on a versioned containerd 2.x default-config reference generated from containerd config default, with links to the existing plugin docs instead of duplicating every plugin field. Would that fit the docs direction you would expect for #9457? Let me know what you think.

  16. avneetbansal-aws commented on Oct 7, 2026

    @avneetbansal-aws

    Thanks for laying out the problem clearly. The scattered feeling is real, and the specific example you gave (the per-registry TLS settings) is a good place to anchor a first improvement rather than trying to regenerate the whole config.toml at once.

    A full values.yaml-style reference for every field is a large, moving target, since the config is spread across plugins and changes between the 1.x and 2.x formats. A single sweeping PR for that would be hard to review and hard to keep current. A smaller, well-scoped pass is more likely to land and still helps the exact case you hit.

    Here is what I would propose as that first pass. The current registry TLS story lives in the per-host hosts.toml mechanism (config_path and certs.d), which is the non-deprecated replacement for the old inline registry.configs."HOST".tls block you saw in older docs. docs/hosts.md already shows ca in a mirror example and skip_verify in the bypass example, but the field-by-field "hosts.toml Content Description - Detail" section only documents server and capabilities in full. The TLS-related fields a user reaches for (ca, client, and skip_verify) do not have their own entries there yet. I would add commented, copy-pasteable entries for those fields in that detail section, and add a short note in docs/cri/registry.md that points from the deprecated inline tls block to the hosts.toml equivalent, so someone searching for the old key lands in the right place.

    That keeps the change bounded to the TLS gap you called out, documents the current mechanism rather than the deprecated one, and cross-links the two docs so the path is discoverable.

    Before I write it, does this direction match what you had in mind, and are maintainers comfortable with the TLS/hosts.toml slice as the starting scope? If you would rather I target a different block first, happy to adjust.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions