Replace AUTH_AUDIENCE with the Composio organization ID from Project Settings → General; the
placeholder above is not a valid production audience.Replace the OTLP placeholders using the telemetry delivery guide. Running
a collector beside Keyring is recommended for production.Create config.yaml using one of the KMS adapter examples. Prefer a workload identity so the file contains key references, not long-lived provider credentials.
Treat both files as secrets if either contains an OTLP credential, cloud credential, Vault token,
private key, or access token. Do not bake them into the image.
The process listens on 0.0.0.0 inside the container so port publishing works, while the example binds only to host loopback. Put a reviewed TLS reverse proxy or private load balancer in front of it before remote use.
With AWS adapters, credential_source: runtime_environment checks static AWS environment variables first, then ECS-compatible container credential endpoints. It supports ECS/Fargate task roles and EKS Pod Identity. It intentionally does not use EC2 IMDS or IRSA/web identity.The application refreshes expiring container credentials and may use still-valid cached credentials during a transient endpoint failure. Provider IAM must allow only the configured root and transfer keys.
The image includes a healthcheck for /healthz. Because the container has no shell or diagnostic
utilities, perform troubleshooting from the host, a sidecar, or your platform tooling.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Keyring","description":"Deploy and operate Keyring, the credential-holding proxy","colors":{"primary":"#51A2FF","light":"#287FC3","dark":"#79B8F3"},"logo":{"light":"https://mintcdn.com/composio-keyring/jZ8ZYloIv7UM-j2J/assets/brand/keyring_logo_light.svg?fit=max\u0026auto=format\u0026n=jZ8ZYloIv7UM-j2J\u0026q=85\u0026s=5912304b4a8d6b230dc5af515e3531a4","dark":"https://mintcdn.com/composio-keyring/jZ8ZYloIv7UM-j2J/assets/brand/keyring_logo_dark.svg?fit=max\u0026auto=format\u0026n=jZ8ZYloIv7UM-j2J\u0026q=85\u0026s=aa0bb1f1462e9915e1fa8e78cc1779c2"},"favicon":{"light":"https://mintcdn.com/composio-keyring/yr3Q39JJeEl8FtbM/assets/brand/composio_mark_black.svg?fit=max\u0026auto=format\u0026n=yr3Q39JJeEl8FtbM\u0026q=85\u0026s=66ba3b07082be367c051c435a1d9faa1","dark":"https://mintcdn.com/composio-keyring/yr3Q39JJeEl8FtbM/assets/brand/composio_mark_white.svg?fit=max\u0026auto=format\u0026n=yr3Q39JJeEl8FtbM\u0026q=85\u0026s=9d8bf8287aba438d85eb29e8f6b4a02c"},"appearance":{"default":"system"},"background":{"decoration":"grid","color":{"light":"#F6F6F6","dark":"#0F0F0F"}},"fonts":{"family":"ABC Diatype","weight":400,"source":"https://brand.composio.dev/fonts/ABCDiatype-Regular.woff2","format":"woff2"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":false},"contextual":{"options":["copy"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"composio-keyring","hasAudioNarration":false,"actualSubdomain":"composio-keyring","customDomains":["keyring.docs.composio.dev"],"gitSource":{"type":"github","owner":"composiohq","repo":"keyring","deployBranch":"codex/keyring-customer-docs","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a914103c027eb3ce5896722","collectionId":"594f4aac-8383-4104-9a27-58cf3d5a0249","liveDeploymentHistoryId":"6a914103c027eb3ce5896722","schemaVersion":"v3"},"entitlements":{},"buildId":"6a914103c027eb3ce5896722","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Deploy","count":8},{"language":"default","tag":"Configure","count":4},{"language":"default","tag":"Security","count":4},{"language":"default","tag":"How Keyring works","count":3},{"language":"default","tag":"Get started","count":1},{"language":"default","tag":"Operate","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","href":"/_mintlify/custom/composio-keyring/14b27f86d9163d7c/style.css"}],"page":{"pagePath":"deployment/docker","slug":"/deployment/docker","pageMetadata":{"title":"Deploy with Docker","description":"Run the published distroless Node image with a mounted encryption configuration.","icon":"container","href":"/deployment/docker"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Run the published distroless Node image with a mounted encryption configuration.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`The official image runs Keyring as a non-root user in a small distroless container with no shell or\npackage manager.`}),`\n`,_jsx(Heading,{level:`2`,id:`pull-the-official-image`,children:`Pull the official image`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`docker`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` pull`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` composiohq/keyring:alpha`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`alpha`}),` is the current supported image tag on Docker Hub. It is a moving tag; use a controlled rollout\nwhen adopting an update.`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-runtime-configuration`,children:`Create runtime configuration`}),`\n`,_jsxs(_components.p,{children:[`Create `,_jsx(_components.code,{children:`keyring.env`}),` without provider credentials:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`APP_ENV`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`production`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`RUNTIME`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`node`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`HOST`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`0.0.0.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`PORT`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`7464`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_AUDIENCE`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=\u003c`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`COMPOSIO_ORG_ID`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_ISSUER`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`https://backend.composio.dev`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_JWT_ALGORITHMS`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`RS256`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUTH_JWKS_URL`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`https://backend.composio.dev/.well-known/jwks.json`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`AUDIT_DURABILITY`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`required`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`OTEL_COLLECTOR_URL`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`https://otel.example.com`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`OTEL_COLLECTOR_HEADERS`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`Authorization`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`Bearer%20replace-me`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`LOG_LEVEL`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`info`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`ENCRYPTION_CONFIG`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`/etc/keyring/config.yaml`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`AUTH_AUDIENCE`}),` with the Composio organization ID from `,_jsx(_components.strong,{children:`Project Settings → General`}),`; the\nplaceholder above is not a valid production audience.`]}),`\n`,_jsxs(_components.p,{children:[`Replace the OTLP placeholders using the `,_jsx(_components.a,{href:`/deployment/observability`,children:`telemetry delivery guide`}),`. Running\na collector beside Keyring is recommended for production.`]}),`\n`,_jsxs(_components.p,{children:[`Create `,_jsx(_components.code,{children:`config.yaml`}),` using one of the `,_jsx(_components.a,{href:`/configuration/kms_adapters`,children:`KMS adapter examples`}),`. Prefer a workload identity so the file contains key references, not long-lived provider credentials.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Treat both files as secrets if either contains an OTLP credential, cloud credential, Vault token,\nprivate key, or access token. Do not bake them into the image.`})}),`\n`,_jsx(Heading,{level:`2`,id:`run-the-container`,children:`Run the container`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`docker`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` run`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --rm`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --name`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` keyring`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --env-file`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` keyring.env`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --mount`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` type=bind,src=\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`$PWD`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`/config.yaml\",dst=/etc/keyring/config.yaml,readonly`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --publish`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 127.0.0.1:7464:7464`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` composiohq/keyring:alpha`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The process listens on `,_jsx(_components.code,{children:`0.0.0.0`}),` inside the container so port publishing works, while the example binds only to host loopback. Put a reviewed TLS reverse proxy or private load balancer in front of it before remote use.`]}),`\n`,_jsx(Heading,{level:`2`,id:`verify-the-deployment`,children:`Verify the deployment`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --fail`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` http://127.0.0.1:7464/healthz`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --fail`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` http://127.0.0.1:7464/readyz`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --fail`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` http://127.0.0.1:7464/transfer-keys`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`container-platform-identity`,children:`Container-platform identity`}),`\n`,_jsxs(_components.p,{children:[`With AWS adapters, `,_jsx(_components.code,{children:`credential_source: runtime_environment`}),` checks static AWS environment variables first, then ECS-compatible container credential endpoints. It supports ECS/Fargate task roles and EKS Pod Identity. It intentionally does not use EC2 IMDS or IRSA/web identity.`]}),`\n`,_jsx(_components.p,{children:`The application refreshes expiring container credentials and may use still-valid cached credentials during a transient endpoint failure. Provider IAM must allow only the configured root and transfer keys.`}),`\n`,_jsx(Heading,{level:`2`,id:`healthcheck-behavior`,children:`Healthcheck behavior`}),`\n`,_jsxs(_components.p,{children:[`The image includes a healthcheck for `,_jsx(_components.code,{children:`/healthz`}),`. Because the container has no shell or diagnostic\nutilities, perform troubleshooting from the host, a sidecar, or your platform tooling.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Deploy with Docker","description":"Run the published distroless Node image with a mounted encryption configuration.","icon":"container","href":"/deployment/docker"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Pull the official image","slug":"pull-the-official-image","depth":2,"children":[]},{"title":"Create runtime configuration","slug":"create-runtime-configuration","depth":2,"children":[]},{"title":"Run the container","slug":"run-the-container","depth":2,"children":[]},{"title":"Verify the deployment","slug":"verify-the-deployment","depth":2,"children":[]},{"title":"Container-platform identity","slug":"container-platform-identity","depth":2,"children":[]},{"title":"Healthcheck behavior","slug":"healthcheck-behavior","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"composio-keyring","siteName":"Keyring","title":"Deploy with Docker - Keyring","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-28T08:05:36.916Z","originalFileLocation":"deployment/docker.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run the published distroless Node image with a mounted encryption configuration.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Keyring\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Deploy with Docker - Keyring\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run the published distroless Node image with a mounted encryption configuration.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Keyring\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://keyring.docs.composio.dev/deployment/docker\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://composio-keyring.mintlify.app/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Deploy+with+Docker\u0026amp;description=Run+the+published+distroless+Node+image+with+a+mounted+encryption+configuration.\u0026amp;theme=075600894632bb055a3e0580\u0026amp;signature=dbb1fed35ca8d25ec06cdcc039004ea204213da0b84076364fa4f2ab18a8ce16\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Deploy with Docker - Keyring\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run the published distroless Node image with a mounted encryption configuration.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://composio-keyring.mintlify.app/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Deploy+with+Docker\u0026amp;description=Run+the+published+distroless+Node+image+with+a+mounted+encryption+configuration.\u0026amp;theme=075600894632bb055a3e0580\u0026amp;signature=dbb1fed35ca8d25ec06cdcc039004ea204213da0b84076364fa4f2ab18a8ce16\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/composio-keyring/Wjp6ZPshKHJXHjSf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Keyring\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#51A2FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://keyring.docs.composio.dev/deployment/docker\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployment/docker.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://keyring.docs.composio.dev/#organization\",\"name\":\"Keyring\",\"url\":\"https://keyring.docs.composio.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/composio-keyring/jZ8ZYloIv7UM-j2J/assets/brand/keyring_logo_light.svg?fit=max\u0026auto=format\u0026n=jZ8ZYloIv7UM-j2J\u0026q=85\u0026s=5912304b4a8d6b230dc5af515e3531a4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://keyring.docs.composio.dev#website\",\"name\":\"Keyring\",\"url\":\"https://keyring.docs.composio.dev\",\"publisher\":{\"@id\":\"https://keyring.docs.composio.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://keyring.docs.composio.dev/deployment/docker#webpage\",\"url\":\"https://keyring.docs.composio.dev/deployment/docker\",\"name\":\"Deploy with Docker\",\"description\":\"Run the published distroless Node image with a mounted encryption configuration.\",\"dateModified\":\"2026-08-28T08:05:36.916Z\",\"isPartOf\":{\"@id\":\"https://keyring.docs.composio.dev#website\"},\"breadcrumb\":{\"@id\":\"https://keyring.docs.composio.dev/deployment/docker#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://keyring.docs.composio.dev/deployment/docker#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deploy\",\"item\":\"https://keyring.docs.composio.dev/deployment/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deploy with Docker\",\"item\":\"https://keyring.docs.composio.dev/deployment/docker\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://keyring.docs.composio.dev/deployment/docker#article\",\"headline\":\"Deploy with Docker\",\"name\":\"Deploy with Docker\",\"description\":\"Run the published distroless Node image with a mounted encryption configuration.\",\"url\":\"https://keyring.docs.composio.dev/deployment/docker\",\"mainEntityOfPage\":{\"@id\":\"https://keyring.docs.composio.dev/deployment/docker#webpage\"},\"dateModified\":\"2026-08-28T08:05:36.916Z\",\"publisher\":{\"@id\":\"https://keyring.docs.composio.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://keyring.docs.composio.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Keyring\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Keyring","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Composio Keyring","icon":"key","href":"/index"}]},{"group":"How Keyring works","pages":[{"title":"How Keyring works with Composio","icon":"workflow","href":"/concepts/how_it_works"},{"title":"Credential refresh and exchange","icon":"refresh-cw","href":"/concepts/credential_refresh"},{"title":"Encryption and key hierarchy","icon":"key-round","href":"/concepts/encryption_and_keys"}]},{"group":"Security","pages":[{"title":"Security model","icon":"shield-check","href":"/security/security_model"},{"title":"Network and request policy","icon":"network","href":"/security/network_and_policy"},{"title":"Origin allowlist","icon":"globe-lock","href":"/security/origin_allowlist/overview"},{"title":"Audit and observability","icon":"clipboard-check","href":"/security/audit_and_observability"}]},{"group":"Deploy","pages":[{"title":"Deployment overview","icon":"cloud","href":"/deployment/overview"},{"title":"Set up telemetry delivery","icon":"activity","href":"/deployment/observability"},{"title":"Deploy on AWS ECS","icon":"server","href":"/deployment/aws_ecs"},{"title":"Deploy on GCP Cloud Run","description":"Run Keyring with Cloud Run service identity, Cloud KMS, and Cloud Armor ingress.","icon":"cloud","href":"/deployment/gcp_cloud_run"},{"title":"Deploy with Docker","icon":"container","href":"/deployment/docker"},{"title":"Deploy on Kubernetes","description":"Install the Node image with Helm, Kubernetes Secrets, probes, and hardened pod defaults.","icon":"boxes","href":"/deployment/kubernetes"},{"title":"Deploy to Cloudflare Workers","icon":"cloud","href":"/deployment/cloudflare_workers"},{"title":"Deploy to Vercel","icon":"triangle","href":"/deployment/vercel"}]},{"group":"Configure","pages":[{"title":"Runtime configuration","icon":"sliders-horizontal","href":"/configuration/runtime"},{"title":"Encryption configuration","icon":"key","href":"/configuration/encryption"},{"title":"KMS and Vault adapters","icon":"vault","href":"/configuration/kms_adapters"},{"title":"Helm values reference","icon":"ship","href":"/configuration/helm"}]},{"group":"Operate","pages":[{"title":"Health and troubleshooting","icon":"stethoscope","href":"/operations/health_and_troubleshooting"}]}]},"title":"Deploy with Docker - Keyring","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}