Files
platform/services/brain/storage/86fc3ec7-be9e-4f63-8c62-a27d5465cb09/archived_html/page.html
Yusuf Suleman 2072c359aa feat: wire brain service to platform gateway
- Gateway proxies /api/brain/* to brain-api:8200/api/* via pangolin network
- User identity injected via X-Gateway-User-Id header
- Brain app registered in gateway database (sort_order 9)
- Added to GATEWAY_KEY_SERVICES for dashboard integration
- Tested: health, config, list, create all working through gateway

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:32:53 -05:00

1204 lines
478 KiB
HTML

<!doctype html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Quickstart | Docker Docs</title><meta name=description content="Follow this hands-on tutorial to learn how to use Docker Compose from defining application dependencies to experimenting with commands."><meta name=keywords content="docker,compose,example,docker,compose,tutorial,how,to,use,docker,compose,running,docker,compose,how,to,run,docker,compose,docker,compose,build,image,docker,compose,command,example,run,docker,compose,file,how,to,create,a,docker,compose,file,run,a,docker,compose,file"><link rel=canonical href=https://docs.docker.com/compose/gettingstarted/><link rel=icon href=/assets/images/favicon-32x32.png sizes=32x32><link rel=icon href=/assets/images/favicon-192x192.png sizes=192x192><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel="shortcut icon" href=/favicon.ico><meta name=theme-color content="#2496ed"><meta name=twitter:title itemprop="title name" content="Quickstart"><meta name=twitter:description property="og:description" itemprop=description content="Follow this hands-on tutorial to learn how to use Docker Compose from defining application dependencies to experimenting with commands."><meta name=twitter:card content="summary_large_image"><meta name=twitter:domain content="https://docs.docker.com/"><meta name=twitter:site content="@docker_docs"><meta name=twitter:url content="https://twitter.com/docker_docs"><meta name=twitter:image:src content="https://docs.docker.com/images/thumbnail.webp"><meta name=twitter:image:alt content="Docker Documentation"><meta property="og:title" content="Quickstart"><meta property="og:description" content="Follow this hands-on tutorial to learn how to use Docker Compose from defining application dependencies to experimenting with commands."><meta property="og:type" content="website"><meta property="og:updated_time" itemprop=dateUpdated content="2026-03-09 16:00:22 +0000 UTC"><meta property="og:image" itemprop="image primaryImageOfPage" content="https://docs.docker.com/images/thumbnail.webp"><meta property="og:locale" content="en_US"><meta property="og:url" content="https://docs.docker.com/compose/gettingstarted/"><meta property="og:site_name" content="Docker Documentation"><meta property="article:published_time" itemprop=datePublished content="2026-03-09 16:00:22 +0000 UTC"><script type=application/ld+json>{"@context":"https://schema.org","@type":"TechArticle","articleSection":"manuals","author":{"@type":"Organization","name":"Docker Inc","url":"https://www.docker.com"},"dateModified":"2026-03-09T16:00:22Z","description":"Follow this hands-on tutorial to learn how to use Docker Compose from defining application dependencies to experimenting with commands.","headline":"Quickstart","inLanguage":"en","isPartOf":{"@id":"https://docs.docker.com/compose/","@type":"WebPage","name":"Docker Compose"},"keywords":["docker","compose","example","docker","compose","tutorial","how","to","use","docker","compose","running","docker","compose","how","to","run","docker","compose","docker","compose","build","image","docker","compose","command","example","run","docker","compose","file","how","to","create","a","docker","compose","file","run","a","docker","compose","file"],"mainEntityOfPage":{"@id":"https://docs.docker.com/compose/gettingstarted/","@type":"WebPage"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://docs.docker.com/assets/images/docker-logo.png"},"name":"Docker Inc","url":"https://www.docker.com"},"url":"https://docs.docker.com/compose/gettingstarted/"}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":{"@id":"https://docs.docker.com/manuals/","name":"Manuals"},"position":1},{"@type":"ListItem","item":{"@id":"https://docs.docker.com/compose/","name":"Docker Compose"},"position":2},{"@type":"ListItem","item":{"@id":"https://docs.docker.com/compose/gettingstarted/","name":"Quickstart"},"position":3}]}</script><link rel=alternate type=text/markdown href=https://docs.docker.com/compose/gettingstarted/index.md>
<link
rel="stylesheet"
href="/css/style.49821f57f6878ee837c9042f3caf0c9d4e59e7bbd61bb6e8f9c30d7ae4fc1229.css"
integrity="sha256-SYIfV/aHjug3yQQvPK8MnU5Z57vWG7bo&#43;cMNeuT8Eik="
crossorigin="anonymous"
/>
<link href=/pagefind/pagefind-component-ui.css rel=stylesheet><script src=https://cdn.cookielaw.org/scripttemplates/otSDKStub.js type=text/javascript data-domain-script=65425fb0-7b36-4317-9f10-7b3e08039af0></script><script type=text/javascript>function OptanonWrapper(){}</script><script>(function(e,t,n,s,o){e[s]=e[s]||[],e[s].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var a=t.getElementsByTagName(n)[0],i=t.createElement(n),r=s!="dataLayer"?"&l="+s:"";i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+o+r,a.parentNode.insertBefore(i,a)})(window,document,"script","dataLayer","GTM-WL2QLG5")</script><script>(function(e,t,n,s,o,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:3169877,hjsv:6},o=t.getElementsByTagName("head")[0],i=t.createElement("script"),i.async=1,i.src=n+e._hjSettings.hjid+s+e._hjSettings.hjsv,o.appendChild(i)})(window,document,"https://static.hotjar.com/c/hotjar-",".js?sv=")</script><link href=/assets/fonts/RobotoFlex.woff2 rel=preload as=font type=font/woff2 crossorigin><script>(()=>{function t(){let e=localStorage.getItem("theme-preference");return e||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")}var e=t();document.firstElementChild.className=e==="dark"?"dark":"light",localStorage.setItem("theme-preference",e)})()</script><script defer src=https://docs.docker.com/scripts.js></script></head><body class="dark:bg-navbar-bg-dark bg-navbar-bg flex flex-col items-center text-base text-black dark:text-white"><header class="sticky top-0 z-20 h-16 w-full bg-blue-600 text-white"><div class="flex h-full justify-between gap-2 mx-auto px-4"><div class="flex h-full items-center gap-2 lg:gap-8"><button x-data @click="$store.showSidebar = true" class="icon-svg block h-full px-4 md:hidden" aria-label=Menu>
<svg width="48" height="48" viewBox="0 -960 960 960"><path d="M150-240q-12.75.0-21.37-8.68-8.63-8.67-8.63-21.5.0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75.0 21.38 8.68 8.62 8.67 8.62 21.5.0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150zm0-210q-12.75.0-21.37-8.68-8.63-8.67-8.63-21.5.0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75.0 21.38 8.68 8.62 8.67 8.62 21.5.0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150zm0-210q-12.75.0-21.37-8.68-8.63-8.67-8.63-21.5.0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75.0 21.38 8.68 8.62 8.67 8.62 21.5.0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150z"/></svg></button><div><a title="Docker Docs home page" href=https://docs.docker.com/><div class="hidden sm:block"><svg width="160" height="24" viewBox="0 0 160 24" fill="none"><path d="M23.6087 10.3866C23.0202 9.98965 21.4744 9.81999 20.3501 10.1235 20.2896 9.00129 19.7119 8.05574 18.656 7.23081L18.2647 6.96776 18.0038 7.36233C17.4914 8.14134 17.2763 9.17951 17.3524 10.1235 17.413 10.7048 17.6148 11.3586 18.0038 11.8333c-1.4627.8506-2.8113.6576-8.78345.6576H.00209363C-.0250805 13.8427.192313 16.4428 1.8414 18.5588 2.02385 18.7923 2.22339 19.0187 2.44001 19.2366c1.34085 1.3464 3.36726 2.3332 6.39757 2.3363C13.4603 21.5768 17.4207 19.0724 19.8299 13.017 20.6226 13.0302 22.715 13.1594 23.7391 11.1757 23.764 11.1422 24 10.6496 24 10.6496L23.6087 10.3866zM6.01846 8.99195H3.42604V11.5905H6.01846V8.99195zm3.34941.0H6.77545V11.5905H9.36787V8.99195zm3.34943.0H10.1249V11.5905h2.5924V8.99195zm3.3494.0H13.4743V11.5905h2.5924V8.99195zm-13.39843.0H.0766285V11.5905H2.66905L2.66827 8.99195zM6.01768 5.70936H3.42526V8.30788H6.01768V5.70936zm3.34941.0H6.77468V8.30788H9.36709V5.70936zm3.34941.0H10.1241V8.30788h2.5924V5.70936zm0-3.2826H10.1241V5.02529h2.5924V2.42676z" fill="#fff"/><path d="M35.774 21.092C34.578 21.092 33.497 20.816 32.531 20.264 31.5803 19.6967 30.8213 18.93 30.254 17.964 29.702 16.998 29.426 15.9093 29.426 14.698s.253-2.2923.759-3.243C30.7063 10.489 31.4117 9.73 32.301 9.178 33.1903 8.61067 34.1947 8.327 35.314 8.327 36.2187 8.327 37.0543 8.51867 37.821 8.902 38.5877 9.27 39.2317 9.776 39.753 10.42V4.21C39.753 3.85733 39.8603 3.57367 40.075 3.359 40.305 3.14433 40.5887 3.037 40.926 3.037 41.2787 3.037 41.5623 3.14433 41.777 3.359S42.099 3.85733 42.099 4.21V14.698C42.099 15.9093 41.8153 16.998 41.248 17.964 40.696 18.93 39.9447 19.6967 38.994 20.264 38.0433 20.816 36.97 21.092 35.774 21.092zm0-2.07C36.556 19.022 37.2537 18.838 37.867 18.47 38.4803 18.0867 38.9633 17.5653 39.316 16.906 39.6687 16.2467 39.845 15.5107 39.845 14.698 39.845 13.87 39.6687 13.134 39.316 12.49 38.9633 11.846 38.4803 11.34 37.867 10.972 37.2537 10.5887 36.556 10.397 35.774 10.397 35.0073 10.397 34.3097 10.5887 33.681 10.972 33.0677 11.34 32.577 11.846 32.209 12.49 31.8563 13.134 31.68 13.87 31.68 14.698 31.68 15.5107 31.8563 16.2467 32.209 16.906 32.577 17.5653 33.0677 18.0867 33.681 18.47 34.3097 18.838 35.0073 19.022 35.774 19.022zm15.1719 2.07c-1.242.0-2.3384-.2683-3.289-.805C46.7062 19.735 45.9549 18.9837 45.4029 18.033 44.8662 17.067 44.5979 15.963 44.5979 14.721c0-1.2573.268299999999996-2.3613.805-3.312C45.9549 10.443 46.7062 9.69167 47.6569 9.155 48.6075 8.603 49.7039 8.327 50.9459 8.327 52.1725 8.327 53.2612 8.603 54.2119 9.155 55.1625 9.69167 55.9062 10.443 56.4429 11.409 56.9949 12.3597 57.2709 13.4637 57.2709 14.721c0 1.242-.2684 2.346-.805 3.312C55.9292 18.9837 55.1855 19.735 54.2349 20.287c-.950700000000005.5367-2.047.805-3.289.805zm0-2.07c.7973.0 1.5026-.183999999999998 2.116-.552C53.6752 18.102 54.1505 17.596 54.4879 16.952 54.8405 16.308 55.0169 15.5643 55.0169 14.721S54.8405 13.134 54.4879 12.49C54.1505 11.8307 53.6752 11.317 53.0619 10.949 52.4485 10.581 51.7432 10.397 50.9459 10.397 50.1485 10.397 49.4432 10.581 48.8299 10.949 48.2165 11.317 47.7335 11.8307 47.3809 12.49 47.0282 13.134 46.8519 13.8777 46.8519 14.721S47.0282 16.308 47.3809 16.952C47.7335 17.596 48.2165 18.102 48.8299 18.47 49.4432 18.838 50.1485 19.022 50.9459 19.022zm14.5205 2.07C64.2397 21.092 63.1434 20.816 62.1774 20.264 61.2267 19.6967 60.4754 18.9377 59.9234 17.987 59.3867 17.021 59.1184 15.9323 59.1184 14.721c0-1.242.268299999999996-2.346.805-3.312C60.46 10.443 61.196 9.69167 62.1314 9.155 63.0667 8.603 64.14 8.327 65.3514 8.327 66.256 8.327 67.084 8.50333 67.8354 8.856 68.5867 9.19333 69.2614 9.707 69.8594 10.397 70.0741 10.6423 70.1507 10.8953 70.0894 11.156S69.8594 11.6467 69.5834 11.846C69.3687 11.9993 69.1311 12.053 68.8704 12.007 68.6097 11.9457 68.372 11.8077 68.1574 11.593 67.406 10.7957 66.4707 10.397 65.3514 10.397 64.5694 10.397 63.8794 10.581 63.2814 10.949 62.6834 11.3017 62.2157 11.8 61.8784 12.444 61.541 13.088 61.3724 13.847 61.3724 14.721 61.3724 15.549 61.541 16.285 61.8784 16.929 62.231 17.573 62.714 18.0867 63.3274 18.47 63.9407 18.838 64.6537 19.022 65.4664 19.022 66.0031 19.022 66.4707 18.9607 66.8694 18.838 67.2834 18.7 67.6591 18.493 67.9964 18.217 68.2417 18.0177 68.4947 17.9103 68.7554 17.895 69.0161 17.8643 69.2461 17.9333 69.4454 18.102 69.706 18.3167 69.8517 18.562 69.8824 18.838 69.913 19.0987 69.821 19.3363 69.6064 19.551 68.5024 20.5783 67.1224 21.092 65.4664 21.092zM74.7839 16.4l-1.426-1.564L80.4189 8.534C80.6489 8.31933 80.9019 8.21967 81.1779 8.235 81.4692 8.25033 81.7145 8.373 81.9139 8.603 82.1285 8.833 82.2282 9.086 82.2129 9.362 82.1975 9.638 82.0749 9.88333 81.8449 10.098L74.7839 16.4zM73.7029 21C73.3655 21 73.0895 20.9003 72.8749 20.701 72.6755 20.4863 72.5759 20.2103 72.5759 19.873V4.164C72.5759 3.82667 72.6755 3.55833 72.8749 3.359 73.0895 3.14433 73.3655 3.037 73.7029 3.037 74.0402 3.037 74.3085 3.14433 74.5079 3.359 74.7225 3.55833 74.8299 3.82667 74.8299 4.164V19.873C74.8299 20.2103 74.7225 20.4863 74.5079 20.701 74.3085 20.9003 74.0402 21 73.7029 21zM81.9139 20.885C81.6685 21.0843 81.3925 21.1687 81.0859 21.138 80.7945 21.1227 80.5492 20.9923 80.3499 20.747L75.6809 14.974l1.61-1.518L82.0749 19.344C82.2742 19.5893 82.3585 19.8577 82.3279 20.149 82.3125 20.425 82.1745 20.6703 81.9139 20.885zM89.4361 21.092c-1.2727.0-2.4074-.2683-3.404-.805C85.0507 19.735 84.2764 18.9837 83.7091 18.033 83.1571 17.067 82.8811 15.963 82.8811 14.721 82.8811 13.4637 83.1417 12.3597 83.6631 11.409 84.1997 10.443 84.9357 9.69167 85.8711 9.155 86.8064 8.603 87.8797 8.327 89.0911 8.327 90.2871 8.327 91.3144 8.59533 92.1731 9.132 93.0317 9.65333 93.6834 10.3817 94.1281 11.317 94.5881 12.237 94.8181 13.3027 94.8181 14.514 94.8181 14.8053 94.7184 15.0507 94.5191 15.25 94.3197 15.434 94.0667 15.526 93.7601 15.526H84.4911v-1.84h9.2L92.7481 14.33C92.7327 13.5633 92.5794 12.881 92.2881 12.283 91.9967 11.6697 91.5827 11.1867 91.0461 10.834 90.5094 10.4813 89.8577 10.305 89.0911 10.305 88.2171 10.305 87.4657 10.4967 86.8371 10.88 86.2237 11.2633 85.7561 11.7923 85.4341 12.467 85.1121 13.1263 84.9511 13.8777 84.9511 14.721S85.1427 16.3157 85.5261 16.975C85.9094 17.6343 86.4384 18.1557 87.1131 18.539 87.7877 18.9223 88.5621 19.114 89.4361 19.114 89.9114 19.114 90.3944 19.0297 90.8851 18.861 91.3911 18.677 91.7974 18.47 92.1041 18.24 92.3341 18.0713 92.5794 17.987 92.8401 17.987 93.1161 17.9717 93.3537 18.0483 93.5531 18.217 93.8137 18.447 93.9517 18.7 93.9671 18.976 93.9824 19.252 93.8597 19.4897 93.5991 19.689 93.0777 20.103 92.4261 20.4403 91.6441 20.701 90.8774 20.9617 90.1414 21.092 89.4361 21.092zM97.9372 13.134C97.9372 12.214 98.1596 11.3937 98.6042 10.673 99.0642 9.937 99.6776 9.35433 100.444 8.925 101.211 8.49567 102.054 8.281 102.974 8.281S104.577 8.43433 105.021 8.741C105.481 9.03233 105.658 9.385 105.55 9.799 105.504 10.0137 105.412 10.1823 105.274 10.305 105.152 10.4123 105.006 10.4813 104.837 10.512 104.669 10.5427 104.485 10.535 104.285 10.489 103.304 10.2897 102.422 10.2743 101.64 10.443 100.858 10.6117 100.237 10.926 99.7772 11.386 99.3326 11.846 99.1102 12.4287 99.1102 13.134h-1.173zM97.9602 21C97.5922 21 97.3086 20.908 97.1092 20.724 96.9099 20.5247 96.8102 20.2333 96.8102 19.85V9.569C96.8102 9.201 96.9099 8.91733 97.1092 8.718 97.3086 8.51867 97.5922 8.419 97.9602 8.419 98.3436 8.419 98.6272 8.51867 98.8112 8.718 99.0106 8.902 99.1102 9.18567 99.1102 9.569V19.85C99.1102 20.218 99.0106 20.5017 98.8112 20.701 98.6272 20.9003 98.3436 21 97.9602 21z" fill="#fff"/><path d="M112.797 21.115C111.586 21.115 110.497 20.839 109.531 20.287 108.565 19.7197 107.798 18.953 107.231 17.987 106.679 17.021 106.403 15.9247 106.403 14.698 106.403 13.4867 106.671 12.398 107.208 11.432 107.76 10.466 108.504 9.707 109.439 9.155 110.374 8.58767 111.432 8.304 112.613 8.304c1.027.0 1.955.222329999999999 2.783.667C116.224 9.40033 116.891 9.97533 117.397 10.696V3.934c0-.276.083999999999989-.49067.253-.644C117.819 3.12133 118.033 3.037 118.294 3.037 118.555 3.037 118.769 3.12133 118.938 3.29c.168999999999997.15333.253.368.253.644V14.79C119.16 15.986 118.861 17.067 118.294 18.033 117.742 18.9837 116.983 19.735 116.017 20.287 115.066 20.839 113.993 21.115 112.797 21.115zm0-1.61C113.686 19.505 114.476 19.298 115.166 18.884 115.871 18.4547 116.423 17.8797 116.822 17.159 117.236 16.4383 117.443 15.618 117.443 14.698 117.443 13.7933 117.236 12.9807 116.822 12.26 116.423 11.524 115.871 10.949 115.166 10.535 114.476 10.121 113.686 9.914 112.797 9.914 111.923 9.914 111.133 10.121 110.428 10.535S109.163 11.524 108.749 12.26C108.335 12.9807 108.128 13.7933 108.128 14.698 108.128 15.618 108.335 16.4383 108.749 17.159 109.163 17.8797 109.723 18.4547 110.428 18.884 111.133 19.298 111.923 19.505 112.797 19.505zm15.262 1.61C126.832 21.115 125.736 20.839 124.77 20.287 123.804 19.735 123.045 18.976 122.493 18.01 121.941 17.044 121.665 15.9477 121.665 14.721 121.665 13.479 121.941 12.375 122.493 11.409 123.045 10.443 123.804 9.684 124.77 9.132 125.736 8.58 126.832 8.304 128.059 8.304 129.285 8.304 130.374 8.58 131.325 9.132 132.291 9.684 133.05 10.443 133.602 11.409 134.154 12.375 134.437 13.479 134.453 14.721 134.453 15.9477 134.169 17.044 133.602 18.01 133.05 18.976 132.291 19.735 131.325 20.287 130.374 20.839 129.285 21.115 128.059 21.115zm0-1.61C128.948 19.505 129.745 19.298 130.451 18.884 131.156 18.47 131.708 17.9027 132.107 17.182 132.505 16.4613 132.705 15.641 132.705 14.721S132.505 12.9807 132.107 12.26C131.708 11.524 131.156 10.949 130.451 10.535 129.745 10.121 128.948 9.914 128.059 9.914 127.169 9.914 126.372 10.121 125.667 10.535 124.961 10.949 124.402 11.524 123.988 12.26 123.589 12.9807 123.39 13.801 123.39 14.721S123.589 16.4613 123.988 17.182C124.402 17.9027 124.961 18.47 125.667 18.884 126.372 19.298 127.169 19.505 128.059 19.505zm14.45 1.61C141.298 21.115 140.217 20.839 139.266 20.287 138.331 19.7197 137.587 18.953 137.035 17.987 136.498 17.021 136.23 15.9323 136.23 14.721 136.23 13.4943 136.491 12.398 137.012 11.432 137.533 10.466 138.246 9.707 139.151 9.155 140.056 8.58767 141.098 8.304 142.279 8.304 143.214 8.304 144.073 8.488 144.855 8.856 145.652 9.224 146.35 9.776 146.948 10.512 147.117 10.696 147.178 10.8953 147.132 11.11 147.086 11.3093 146.956 11.4857 146.741 11.639 146.572 11.7617 146.381 11.8077 146.166 11.777 145.967 11.731 145.79 11.616 145.637 11.432 144.748 10.42 143.628 9.914 142.279 9.914 141.42 9.914 140.661 10.121 140.002 10.535 139.358 10.949 138.852 11.5163 138.484 12.237 138.131 12.9577 137.955 13.7857 137.955 14.721 137.955 15.641 138.147 16.4613 138.53 17.182 138.913 17.9027 139.45 18.47 140.14 18.884 140.83 19.298 141.62 19.505 142.509 19.505 143.107 19.505 143.651 19.4283 144.142 19.275 144.648 19.1063 145.093 18.8533 145.476 18.516 145.66 18.3627 145.852 18.2783 146.051 18.263 146.25 18.2477 146.434 18.309 146.603 18.447 146.787 18.6157 146.887 18.8073 146.902 19.022 146.933 19.2367 146.864 19.4207 146.695 19.574 145.576 20.6013 144.18 21.115 142.509 21.115zm11.46.0C153.064 21.115 152.167 20.9617 151.278 20.655 150.389 20.3483 149.668 19.8883 149.116 19.275 148.947 19.091 148.878 18.884 148.909 18.654S149.055 18.2247 149.254 18.056C149.469 17.9027 149.691 17.8413 149.921 17.872 150.151 17.9027 150.343 18.0023 150.496 18.171 150.864 18.6003 151.347 18.93 151.945 19.16 152.558 19.39 153.233 19.505 153.969 19.505 155.104 19.505 155.924 19.3133 156.43 18.93 156.936 18.5313 157.197 18.056 157.212 17.504 157.212 16.952 156.951 16.4997 156.43 16.147 155.909 15.779 155.05 15.4953 153.854 15.296 152.305 15.0507 151.171 14.6213 150.45 14.008 149.729 13.3947 149.369 12.6663 149.369 11.823 149.369 11.041 149.576 10.3893 149.99 9.868 150.404 9.34667 150.956 8.95567 151.646 8.695 152.336 8.43433 153.095 8.304 153.923 8.304 154.95 8.304 155.832 8.48033 156.568 8.833 157.319 9.18567 157.925 9.661 158.385 10.259 158.538 10.4583 158.6 10.6653 158.569 10.88 158.538 11.0947 158.416 11.271 158.201 11.409 158.017 11.5163 157.802 11.5547 157.557 11.524 157.327 11.478 157.128 11.363 156.959 11.179 156.576 10.7343 156.131 10.4123 155.625 10.213 155.119 9.99833 154.536 9.891 153.877 9.891 153.034 9.891 152.359 10.0673 151.853 10.42 151.347 10.7573 151.094 11.1867 151.094 11.708 151.094 12.0607 151.186 12.3673 151.37 12.628 151.569 12.8887 151.899 13.1187 152.359 13.318 152.834 13.5173 153.494 13.686 154.337 13.824 155.487 14.008 156.392 14.284 157.051 14.652 157.726 15.0047 158.201 15.4263 158.477 15.917 158.768 16.3923 158.914 16.9137 158.914 17.481 158.914 18.2017 158.699 18.838 158.27 19.39 157.856 19.9267 157.273 20.3483 156.522 20.655 155.786 20.9617 154.935 21.115 153.969 21.115z" fill="#fff"/></svg></div><div class="block sm:hidden"><svg width="84" height="25" viewBox="0 0 84 25" fill="none"><path d="M23.6087 10.9342C23.0202 10.5373 21.4744 10.3676 20.3501 10.6711 20.2896 9.5489 19.7119 8.60334 18.656 7.77841L18.2647 7.51537 18.0038 7.90993C17.4914 8.68895 17.2763 9.72711 17.3524 10.6711 17.413 11.2525 17.6148 11.9062 18.0038 12.3809c-1.4627.8506-2.8113.6576-8.78345.6576H.00209363C-.0250805 14.3903.192313 16.9904 1.8414 19.1064 2.02385 19.3399 2.22339 19.5663 2.44001 19.7843c1.34085 1.3463 3.36726 2.3331 6.39757 2.3362C13.4603 22.1244 17.4207 19.62 19.8299 13.5646 20.6226 13.5778 22.715 13.707 23.7391 11.7233 23.764 11.6898 24 11.1972 24 11.1972L23.6087 10.9342zM6.01846 9.53956H3.42604V12.1381H6.01846V9.53956zm3.34941.0H6.77545V12.1381H9.36787V9.53956zm3.34943.0H10.1249V12.1381h2.5924V9.53956zm3.3494.0H13.4743V12.1381h2.5924V9.53956zm-13.39843.0H.0766285V12.1381H2.66905L2.66827 9.53956zm3.34941-3.2826H3.42526V8.85549H6.01768V6.25696zm3.34941.0H6.77468V8.85549H9.36709V6.25696zm3.34941.0H10.1241V8.85549h2.5924V6.25696zm0-3.28259H10.1241V5.57289h2.5924V2.97437z" fill="#fff"/><path d="M36.774 21.6394c-1.196.0-2.277-.276-3.243-.827999999999999C32.5803 20.244 31.8213 19.4774 31.254 18.5114 30.702 17.5454 30.426 16.4567 30.426 15.2454c0-1.2114.253-2.2924.759-3.243C31.7063 11.0364 32.4117 10.2774 33.301 9.72536 34.1903 9.15803 35.1947 8.87436 36.314 8.87436 37.2187 8.87436 38.0543 9.06603 38.821 9.44936 39.5877 9.81736 40.2317 10.3234 40.753 10.9674V4.75736C40.753 4.4047 40.8603 4.12103 41.075 3.90636 41.305 3.6917 41.5887 3.58436 41.926 3.58436 42.2787 3.58436 42.5623 3.6917 42.777 3.90636 42.9917 4.12103 43.099 4.4047 43.099 4.75736V15.2454C43.099 16.4567 42.8153 17.5454 42.248 18.5114 41.696 19.4774 40.9447 20.244 39.994 20.8114 39.0433 21.3634 37.97 21.6394 36.774 21.6394zm0-2.07C37.556 19.5694 38.2537 19.3854 38.867 19.0174 39.4803 18.634 39.9633 18.1127 40.316 17.4534 40.6687 16.794 40.845 16.058 40.845 15.2454 40.845 14.4174 40.6687 13.6814 40.316 13.0374 39.9633 12.3934 39.4803 11.8874 38.867 11.5194 38.2537 11.136 37.556 10.9444 36.774 10.9444 36.0073 10.9444 35.3097 11.136 34.681 11.5194 34.0677 11.8874 33.577 12.3934 33.209 13.0374 32.8563 13.6814 32.68 14.4174 32.68 15.2454 32.68 16.058 32.8563 16.794 33.209 17.4534 33.577 18.1127 34.0677 18.634 34.681 19.0174 35.3097 19.3854 36.0073 19.5694 36.774 19.5694zm15.1719 2.07c-1.242.0-2.3384-.2684-3.289-.805C47.7062 20.2824 46.9549 19.531 46.4029 18.5804 45.8662 17.6144 45.5979 16.5104 45.5979 15.2684c0-1.2574.268299999999996-2.3614.805-3.312C46.9549 10.9904 47.7062 10.239 48.6569 9.70236 49.6075 9.15036 50.7039 8.87436 51.9459 8.87436c1.2266.0 2.3153.276 3.266.828000000000001C56.1625 10.239 56.9062 10.9904 57.4429 11.9564 57.9949 12.907 58.2709 14.011 58.2709 15.2684c0 1.242-.2684 2.346-.805 3.312C56.9292 19.531 56.1855 20.2824 55.2349 20.8344c-.950700000000005.5366-2.047.805-3.289.805zm0-2.07C52.7432 19.5694 53.4485 19.3854 54.0619 19.0174 54.6752 18.6494 55.1505 18.1434 55.4879 17.4994 55.8405 16.8554 56.0169 16.1117 56.0169 15.2684 56.0169 14.425 55.8405 13.6814 55.4879 13.0374 55.1505 12.378 54.6752 11.8644 54.0619 11.4964c-.613399999999999-.368-1.3187-.552-2.116-.552C51.1485 10.9444 50.4432 11.1284 49.8299 11.4964 49.2165 11.8644 48.7335 12.378 48.3809 13.0374 48.0282 13.6814 47.8519 14.425 47.8519 15.2684 47.8519 16.1117 48.0282 16.8554 48.3809 17.4994 48.7335 18.1434 49.2165 18.6494 49.8299 19.0174 50.4432 19.3854 51.1485 19.5694 51.9459 19.5694zm14.5205 2.07C65.2397 21.6394 64.1434 21.3634 63.1774 20.8114 62.2267 20.244 61.4754 19.485 60.9234 18.5344 60.3867 17.5684 60.1184 16.4797 60.1184 15.2684c0-1.242.268299999999996-2.346.805-3.312C61.46 10.9904 62.196 10.239 63.1314 9.70236 64.0667 9.15036 65.14 8.87436 66.3514 8.87436 67.256 8.87436 68.084 9.0507 68.8354 9.40336 69.5867 9.7407 70.2614 10.2544 70.8594 10.9444 71.0741 11.1897 71.1507 11.4427 71.0894 11.7034 71.0281 11.964 70.8594 12.194 70.5834 12.3934 70.3687 12.5467 70.1311 12.6004 69.8704 12.5544 69.6097 12.493 69.372 12.355 69.1574 12.1404 68.406 11.343 67.4707 10.9444 66.3514 10.9444 65.5694 10.9444 64.8794 11.1284 64.2814 11.4964 63.6834 11.849 63.2157 12.3474 62.8784 12.9914c-.337400000000002.644-.506 1.403-.506 2.277C62.3724 16.0964 62.541 16.8324 62.8784 17.4764 63.231 18.1204 63.714 18.634 64.3274 19.0174 64.9407 19.3854 65.6537 19.5694 66.4664 19.5694 67.0031 19.5694 67.4707 19.508 67.8694 19.3854 68.2834 19.2474 68.6591 19.0404 68.9964 18.7644 69.2417 18.565 69.4947 18.4577 69.7554 18.4424 70.0161 18.4117 70.2461 18.4807 70.4454 18.6494 70.706 18.864 70.8517 19.1094 70.8824 19.3854 70.913 19.646 70.821 19.8837 70.6064 20.0984 69.5024 21.1257 68.1224 21.6394 66.4664 21.6394zm11.6865.0C77.0795 21.6394 76.0829 21.4784 75.1629 21.1564 74.2582 20.819 73.5529 20.3974 73.0469 19.8914 72.8169 19.646 72.7172 19.37 72.7479 19.0634 72.7939 18.7414 72.9472 18.4807 73.2079 18.2814 73.5145 18.036 73.8135 17.9364 74.1049 17.9824 74.4115 18.013 74.6722 18.1434 74.8869 18.3734 75.1475 18.6647 75.5615 18.9407 76.1289 19.2014 76.7115 19.4467 77.3555 19.5694 78.0609 19.5694 78.9502 19.5694 79.6249 19.4237 80.0849 19.1324 80.5602 18.841 80.8055 18.4654 80.8209 18.0054 80.8362 17.5454 80.6139 17.1467 80.1539 16.8094 79.7092 16.472 78.8889 16.196 77.6929 15.9814 76.1442 15.6747 75.0172 15.2147 74.3119 14.6014 73.6219 13.988 73.2769 13.2367 73.2769 12.3474 73.2769 11.5654 73.5069 10.9214 73.9669 10.4154 74.4269 9.89403 75.0172 9.5107 75.7379 9.26536 76.4585 9.0047 77.2099 8.87436 77.9919 8.87436 79.0039 8.87436 79.9009 9.03536 80.6829 9.35736 81.4649 9.67936 82.0859 10.124 82.5459 10.6914 82.7605 10.9367 82.8602 11.1974 82.8449 11.4734 82.8295 11.734 82.6992 11.9564 82.4539 12.1404 82.2085 12.309 81.9172 12.3627 81.5799 12.3014 81.2425 12.24 80.9589 12.102 80.7289 11.8874 80.3455 11.5194 79.9315 11.2664 79.4869 11.1284 79.0422 10.9904 78.5285 10.9214 77.9459 10.9214 77.2712 10.9214 76.6962 11.0364 76.2209 11.2664 75.7609 11.4964 75.5309 11.8337 75.5309 12.2784 75.5309 12.5544 75.5999 12.8074 75.7379 13.0374 75.8912 13.252 76.1825 13.4514 76.6119 13.6354 77.0412 13.804 77.6699 13.9727 78.4979 14.1414 79.6479 14.3714 80.5525 14.6627 81.2119 15.0154 81.8865 15.368 82.3695 15.782 82.6609 16.2574 82.9522 16.7174 83.0979 17.254 83.0979 17.8674 83.0979 18.5727 82.9062 19.209 82.5229 19.7764 82.1549 20.3437 81.6029 20.796 80.8669 21.1334 80.1462 21.4707 79.2415 21.6394 78.1529 21.6394z" fill="#fff"/></svg></div></a></div><nav class="mt-1 hidden md:flex lg:flex xl:flex 2xl:flex"><ul class="flex text-sm md:text-base lg:gap-4"><li class="border-b-4 border-transparent hover:border-white/20"><a class="block px-2 py-1 whitespace-nowrap" href=/get-started/>Get started</a></li><li class="border-b-4 border-transparent hover:border-white/20"><a class="block px-2 py-1 whitespace-nowrap" href=/guides/>Guides</a></li><li class=border-b-4><a class="block px-2 py-1 whitespace-nowrap" href=/manuals/>Manuals</a></li><li class="border-b-4 border-transparent hover:border-white/20"><a class="block px-2 py-1 whitespace-nowrap" href=/reference/>Reference</a></li></ul></nav></div><div id=buttons class="flex min-w-0 items-center justify-end flex-shrink-0"><div class="flex items-center gap-2"><div data-tooltip-wrapper class=relative><button x-data @click=$store.gordon.toggle() aria-label="Ask Gordon, AI assistant" aria-describedby=gordon-tooltip class="cursor-pointer flex items-center gap-2 p-2 rounded-lg bg-blue-700 border border-blue-500 text-white transition-colors focus:outline-none focus:ring focus:ring-blue-400 shimmer open-kapa-widget">
<span class=icon-svg><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18.5 7.84656v-5M5.5 20.8466v-5M16 5.34656h5M3 18.3466H8M6.5 1.84656 5.71554 3.41547c-.26549.53098-.39823.79647-.57557 1.02653C4.98261 4.64615 4.79959 4.82917 4.59545 4.98653c-.23007.17734-.49555.31008-1.02653.57557L2 6.34656l1.56892.78446c.53098.26549.79646.39823 1.02653.57557C4.79959 7.86395 4.98261 8.04696 5.13997 8.25111c.17734.23006.31008.49555.57557 1.02653L6.5 10.8466l.78446-1.56896C7.54995 8.74666 7.68269 8.48117 7.86003 8.25111 8.01739 8.04696 8.20041 7.86395 8.40455 7.70659 8.63462 7.52925 8.9001 7.3965 9.43108 7.13102L11 6.34656 9.43108 5.5621c-.53098-.26549-.79646-.39823-1.02653-.57557C8.20041 4.82917 8.01739 4.64615 7.86003 4.442c-.17734-.23006-.31008-.49555-.57557-1.02653L6.5 1.84656zM17 11.8466l-.9511 1.9022C15.7834 14.2798 15.6506 14.5453 15.4733 14.7753 15.3159 14.9795 15.1329 15.1625 14.9288 15.3199 14.6987 15.4972 14.4332 15.6299 13.9023 15.8954L12 16.8466l1.9023.9511C14.4332 18.0632 14.6987 18.1959 14.9288 18.3733 15.1329 18.5306 15.3159 18.7136 15.4733 18.9178c.177300000000001.23.3101.4955.5756 1.0265L17 21.8466l.9511-1.9023C18.2166 19.4133 18.3494 19.1478 18.5267 18.9178 18.6841 18.7136 18.8671 18.5306 19.0712 18.3733 19.3013 18.1959 19.5668 18.0632 20.0977 17.7977L22 16.8466 20.0977 15.8954C19.5668 15.6299 19.3013 15.4972 19.0712 15.3199 18.8671 15.1625 18.6841 14.9795 18.5267 14.7753 18.3494 14.5453 18.2166 14.2798 17.9511 13.7488L17 11.8466z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>
<rect width=24 height=24 fill=currentColor fill-opacity=1></g></svg>
</span><span class="hidden px-1 lg:inline">Gordon</span></button><div id=gordon-tooltip data-tooltip-body class="absolute top-0 left-0 hidden whitespace-nowrap rounded-sm bg-gray-900 p-2 text-sm text-white" role=tooltip>Ask Gordon — AI assistant for Docker docs<div data-tooltip-arrow class="absolute h-2 w-2 rotate-45 bg-gray-900"></div></div></div><div id=search-bar-container><div id=search-bar class="h-full relative flex items-center overflow-visible" x-data="{ isSafari: /^((?!chrome|android).)*safari/i.test(navigator.userAgent) }"><button type=button aria-label=Search class="cursor-pointer flex items-center gap-2 p-2 rounded-lg bg-blue-700 border border-blue-500 text-white transition-colors focus:outline-none focus:ring focus:ring-blue-400 hover:bg-blue-800 hover:border-blue-400" id=search-modal-trigger x-show=!isSafari>
<span class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M378-329q-108.16.0-183.08-75Q120-479 120-585t75-181 181.5-75 181 75T632-584.85Q632-542 618-502t-42 75l242 240q9 8.56 9 21.78T818-143t-22.22 9-21.78-9L533-384q-30 26-69.96 40.5Q423.08-329 378-329zm-1-60q81.25.0 138.13-57.5Q572-504 572-585t-56.87-138.5Q458.25-781 377-781q-82.08.0-139.54 57.5T180-585t57.46 138.5T377-389z"/></svg>
</span><span class="hidden px-1 lg:inline">Search</span></button></div><script type=module>
await import('/pagefind/pagefind-component-ui.js');
const { configureInstance, getInstanceManager } = window.PagefindComponents;
configureInstance('default', {
bundlePath: '/pagefind/',
ranking: {
termFrequency: 0.0,
termSimilarity: 2.0,
pageLength: 0.0,
termSaturation: 1.0,
metaWeights: {
title: 10.0,
description: 4.0,
keywords: 6.0
}
}
});
document.body.insertAdjacentHTML('beforeend', `
<pagefind-modal id="search-modal" reset-on-close>
<pagefind-modal-header>
<pagefind-input placeholder="Search documentation…"></pagefind-input>
</pagefind-modal-header>
<pagefind-modal-body>
<p id="search-placeholder" class="text-center text-gray-500 dark:text-gray-400 py-8">
Start typing to search the documentation
</p>
<pagefind-summary></pagefind-summary>
<pagefind-results>
\x3Cscript type="text/pagefind-template">
<li class="py-3 border-b border-gray-200 dark:border-gray-700 last:border-b-0">
\u007b\u007b#if meta.breadcrumbs\u007d\u007d
<p class="text-xs text-gray-500 dark:text-gray-400 mb-1">\u007b\u007b meta.breadcrumbs \u007d\u007d</p>
\u007b\u007b\/if\u007d\u007d
<p class="font-medium">
<a class="text-blue-600 dark:text-blue-400 hover:underline" href="\u007b\u007b meta.url | default(url) | safeUrl \u007d\u007d">
\u007b\u007b meta.title \u007d\u007d
</a>
</p>
\u007b\u007b#if excerpt\u007d\u007d
<p class="text-gray-600 dark:text-gray-400 mt-1 text-sm">\u007b\u007b\u002b excerpt \u002b\u007d\u007d</p>
\u007b\u007b\/if\u007d\u007d
\u007b\u007b#if sub_results\u007d\u007d
<ul class="mt-3 ml-4 flex flex-wrap gap-2">
\u007b\u007b#each sub_results as sub\u007d\u007d
\u007b\u007b#if (lt @index 5)\u007d\u007d
<li class="text-sm">
<a class="text-blue-600 dark:text-blue-400 hover:underline" href="\u007b\u007b sub.url | safeUrl \u007d\u007d">
\u007b\u007b sub.title \u007d\u007d
</a>
</li>
\u007b\u007b\/if\u007d\u007d
\u007b\u007b\/each\u007d\u007d
</ul>
\u007b\u007b\/if\u007d\u007d
</li>
\x3C/script>
</pagefind-results>
</pagefind-modal-body>
</pagefind-modal>
`);
const modal = document.getElementById('search-modal');
const placeholder = document.getElementById('search-placeholder');
const instance = getInstanceManager().getInstance('default');
instance.on('search', (term) => {
placeholder.hidden = !!term;
});
instance.on('results', () => {
placeholder.hidden = !!instance.searchTerm;
});
const openModal = () => modal.open?.();
document.getElementById('search-modal-trigger').addEventListener('click', openModal);
document.addEventListener('keydown', (e) => {
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
e.preventDefault();
openModal();
}
});
</script></div><button aria-label="Theme switch" id=theme-switch class="cursor-pointer p-2 rounded-lg bg-blue-700 border border-blue-500 hover:bg-blue-800 hover:border-blue-400 transition-colors focus:outline-none focus:ring focus:ring-blue-400" x-data="{ theme: localStorage.getItem('theme-preference') }" x-init="$watch('theme', value => {
localStorage.setItem('theme-preference', value);
document.firstElementChild.className = value;
})" @click="theme = (theme === 'dark' ? 'light' : 'dark')">
<span class="icon-svg dark:hidden"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none"><path d="M12 2V4m0 16v2M4 12H2M6.31412 6.31412 4.8999 4.8999m12.786 1.41422L19.1001 4.8999M6.31412 17.69 4.8999 19.1042M17.6859 17.69l1.4142 1.4142M22 12H20m-3 0c0 2.7614-2.2386 5-5 5-2.76142.0-5-2.2386-5-5 0-2.76142 2.23858-5 5-5 2.7614.0 5 2.23858 5 5z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>
<rect width=24 height=24 fill=currentColor fill-opacity=1></g></svg>
</span><span class="icon-svg hidden dark:block"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none"><path d="M22 15.8442C20.6866 16.4382 19.2286 16.7688 17.6935 16.7688c-5.7782.0-10.46234-4.6841-10.46234-10.46226.0-1.53519.33064-2.99314.92461-4.30654C4.52576 3.64163 2 7.2947 2 11.5377 2 17.3159 6.68414 22 12.4623 22c4.243.0 7.8961-2.5258 9.5377-6.1558z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>
<rect width=24 height=24 fill=currentColor fill-opacity=1></g></svg></span></button></div></div></div></header><script>window.GORDON_BASE_URL="https://ai-backend-service.docker.com"</script><div x-data="{
isLoading: false,
error: null,
messages: $persist([]).using(sessionStorage).as('gordon-messages'),
currentQuestion: '',
threadId: $persist(null).using(sessionStorage).as('gordon-threadId'),
includePageContext: $persist(true).using(sessionStorage).as('gordon-includePageContext'),
maxTurnsPerThread: 10,
init() {
// Clean up any streaming messages that might be persisted
this.messages = this.messages.filter(m => !m.isStreaming)
// Watch for store changes to focus input
this.$watch('$store.gordon.isOpen', (isOpen) => {
if (isOpen) {
this.$nextTick(() => {
this.$refs.input?.focus()
})
}
})
// Watch for query from store and populate input
this.$watch('$store.gordon.query', (query) => {
if (query) {
this.currentQuestion = query
const shouldAutoSubmit = this.$store.gordon.autoSubmit
this.$nextTick(() => {
if (shouldAutoSubmit) {
this.askQuestion()
} else {
this.$refs.input?.focus()
this.$refs.input?.select()
}
})
// Clear the store query and autoSubmit flag after using them
this.$store.gordon.query = ''
this.$store.gordon.autoSubmit = false
}
})
},
getTurnCount() {
return this.messages.filter(m => m.role === 'user').length
},
getRemainingTurns() {
return this.maxTurnsPerThread - this.getTurnCount()
},
isThreadLimitReached() {
return this.getTurnCount() >= this.maxTurnsPerThread
},
shouldShowCountdown() {
const remaining = this.getRemainingTurns()
return remaining > 0 && remaining <= 3
},
async askQuestion() {
const question = this.currentQuestion.trim()
if (!question || this.isLoading || this.isThreadLimitReached()) {
return
}
// Add user message to UI
this.messages.push({
role: 'user',
content: question
})
this.currentQuestion = ''
// Reset textarea height
this.$nextTick(() => {
if (this.$refs.input) {
this.$refs.input.style.height = 'auto'
}
})
this.isLoading = true
this.error = null
// Add placeholder for assistant response
const responseIndex = this.messages.length
this.messages.push({
role: 'assistant',
content: '',
isStreaming: true,
questionAnswerId: null,
feedback: null,
copied: false
})
this.$nextTick(() => {
this.$refs.messagesContainer?.scrollTo({
top: this.$refs.messagesContainer.scrollHeight,
behavior: 'smooth'
})
})
try {
await this.streamGordonResponse(responseIndex)
} catch (err) {
// Only set error if messages weren't cleared
if (this.messages.length > 0) {
if (err.message === 'RATE_LIMIT_EXCEEDED') {
this.error = 'You\'ve exceeded your question quota for the day. Please come back tomorrow.'
} else {
this.error = 'Failed to get response. Please try again.'
}
}
console.error('Gordon API error:', err)
// Only try to remove message if it still exists
if (this.messages[responseIndex]) {
this.messages.splice(responseIndex, 1)
}
} finally {
this.isLoading = false
}
},
getSessionId() {
let sessionId = sessionStorage.getItem('gordon-session-id')
if (!sessionId) {
sessionId = `docs-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
sessionStorage.setItem('gordon-session-id', sessionId)
}
return sessionId
},
async streamGordonResponse(responseIndex) {
// Build API request from messages, excluding the streaming placeholder
// The placeholder is at responseIndex, so we take everything before it
const conversationMessages = this.messages.slice(0, responseIndex).map((msg, i) => {
const message = {
role: msg.role,
content: msg.content
}
// Add copilot_references to the last message (most recent user question)
if (i === responseIndex - 1) {
message.copilot_references = [
{
data: {
origin: 'docs-website',
email: 'docs@docker.com',
uuid: this.getSessionId(),
action: 'AskGordon',
...(this.includePageContext && {
page_url: window.location.href,
page_title: &#34;Docker Compose Quickstart&#34;
})
}
}
]
}
return message
})
const isNewConversation = !this.threadId
const payload = {
messages: conversationMessages,
...(this.threadId && { thread_uuid: this.threadId })
}
const response = await fetch(window.GORDON_BASE_URL + '/public/ask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
})
if (!response.ok) {
if (response.status === 429) {
throw new Error('RATE_LIMIT_EXCEEDED')
}
throw new Error(`HTTP ${response.status}: ${response.statusText}`)
}
const reader = response.body.getReader()
const decoder = new TextDecoder()
while (true) {
const { done, value } = await reader.read()
if (done) break
const chunk = decoder.decode(value, { stream: true })
const lines = chunk.split('\n')
for (const line of lines) {
if (!line.trim() || !line.startsWith('data: ')) continue
const data = line.slice(6)
if (data === '[DONE]') continue
try {
const parsed = JSON.parse(data)
// Capture thread_id for new conversations
if (parsed.thread_id) {
if (isNewConversation) {
this.threadId = parsed.thread_id // $persist auto-saves to sessionStorage
} else if (parsed.thread_id !== this.threadId) {
console.warn('Backend returned unexpected thread_id:', parsed.thread_id)
}
continue
}
// Capture question_answer_id for feedback
if (parsed.question_answer_id) {
this.messages[responseIndex].questionAnswerId = parsed.question_answer_id
continue
}
if (parsed.choices && parsed.choices[0]?.delta?.content) {
const content = parsed.choices[0].delta.content
this.messages[responseIndex].content += content
this.$nextTick(() => {
const container = this.$refs.messagesContainer
if (container) {
const isNearBottom = container.scrollHeight - container.scrollTop - container.clientHeight < 100
if (isNearBottom) {
container.scrollTop = container.scrollHeight
}
}
})
}
} catch (e) {
console.error('Failed to parse SSE data:', e)
}
}
}
this.messages[responseIndex].isStreaming = false
},
clearChat() {
if (confirm('Clear all messages?')) {
this.messages = [] // $persist auto-saves empty array
this.threadId = null // $persist auto-removes from sessionStorage
this.error = null
}
},
formatMessageContent(content) {
return this.$markdown(content)
},
async submitFeedback(messageIndex, feedbackType) {
const message = this.messages[messageIndex]
if (message.feedback === feedbackType) {
return
}
// Clear any previous error
message.feedbackError = null
if (!message.questionAnswerId) {
message.feedbackError = 'Unable to submit feedback'
console.error('No question_answer_id available for feedback')
return
}
try {
const response = await fetch(window.GORDON_BASE_URL + '/feedback', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
id: message.questionAnswerId,
feedback: feedbackType
})
})
if (response.ok) {
message.feedback = feedbackType // $persist auto-saves
} else {
message.feedbackError = 'Unable to submit feedback'
console.error('Failed to submit feedback:', response.status, response.statusText)
}
} catch (err) {
message.feedbackError = 'Unable to submit feedback'
console.error('Error submitting feedback:', err)
}
},
async copyAnswer(messageIndex) {
const message = this.messages[messageIndex]
if (!message.content) return
try {
await navigator.clipboard.writeText(message.content)
message.copied = true
this.$nextTick(() => {
setTimeout(() => {
message.copied = false
}, 2000)
})
} catch (err) {
console.error('Failed to copy:', err)
}
}
}" x-cloak @keydown.escape.window=$store.gordon.close()><div x-show=$store.gordon.isOpen x-transition.opacity.duration.300ms @click=$store.gordon.close() class="fixed inset-0 z-40 bg-black/50"></div><div id=gordon-chat x-show=$store.gordon.isOpen x-transition:enter="transition ease-out duration-200" x-transition:enter-start=translate-x-full x-transition:enter-end=translate-x-0 x-transition:leave="transition ease-in duration-200" x-transition:leave-start=translate-x-0 x-transition:leave-end=translate-x-full class="fixed top-0 right-0 z-50 flex h-screen w-full flex-col overflow-hidden rounded-lg bg-white shadow-2xl transition-all duration-200 md:top-2 md:right-2 md:h-[calc(100vh-1rem)] md:w-[min(80ch,90vw)] dark:bg-gray-900"><div class="flex items-center justify-between rounded-t-lg border-b border-gray-200 bg-blue-600 px-6 py-3 dark:border-gray-700"><div class="flex items-center gap-3"><svg width="92" height="20" viewBox="0 0 92 20"><path d="M20.474 6.892 20.813 7.12S20.608 7.547 20.587 7.576C19.699 9.293 17.884 9.181 17.196 9.17c-2.089 5.243-5.524 7.412-9.532 7.408C5.036 16.576 3.279 15.721 2.116 14.556 1.928 14.367 1.755 14.171 1.597 13.969.166 12.136-.022 9.885.002 8.715H7.997c5.179.0 6.348.167 7.617-.57C15.276 7.735 15.101 7.169 15.049 6.665 14.983 5.848 15.17 4.948 15.614 4.274L15.84 3.932 16.179 4.16c.916.714 1.417 1.533 1.469 2.505C18.623 6.402 19.964 6.549 20.474 6.892zM5.22 5.684v2.25H2.972V5.684H5.22zm2.905.0v2.25H5.876V5.684H8.125zm2.905.0v2.25H8.781V5.684H11.03zm2.904.0v2.25H11.686V5.684h2.248zm-11.619.0v2.25H.067V5.684H2.315zM5.22 2.842v2.25H2.972V2.842H5.22zm2.905.0v2.25H5.876V2.842H8.125zm2.905.0v2.25H8.781V2.842H11.03zM11.03.0V2.25H8.781V0H11.03zM34.107 13.496C33.741 14.148 33.264 14.674 32.676 15.074 32.002 15.52 31.226 15.742 30.348 15.742 29.394 15.742 28.548 15.52 27.811 15.074 27.086 14.616 26.513 13.992 26.094 13.203 25.674 12.401 25.464 11.485 25.464 10.454 25.464 9.41 25.687 8.493 26.132 7.704 26.59 6.902 27.213 6.279 28.002 5.833c.788-.458 1.697-.687 2.728-.687 1.017.0 1.92.229 2.709.687C34.227 6.279 34.844 6.902 35.289 7.704 35.747 8.493 35.976 9.41 35.976 10.454v4.124C35.976 15.583 35.754 16.493 35.308 17.308 34.863 18.135 34.24 18.791 33.439 19.274 32.65 19.758 31.734 20 30.692 20 29.789 20 28.943 19.822 28.154 19.465 27.366 19.109 26.698 18.587 26.151 17.9 25.986 17.683 25.922 17.461 25.96 17.232 26.011 17.002 26.138 16.818 26.342 16.678 26.571 16.525 26.806 16.474 27.048 16.525 27.302 16.576 27.505 16.703 27.658 16.907c.343999999999998.433.776.77 1.297 1.012C29.477 18.161 30.068 18.282 30.73 18.282 31.34 18.282 31.9 18.135 32.409 17.842 32.93 17.55 33.343 17.117 33.649 16.544 33.954 15.971 34.107 15.271 34.107 14.444v-.948zM30.73 14.024C31.391 14.024 31.976 13.871 32.485 13.566 32.994 13.26 33.388 12.84 33.668 12.306 33.96 11.771 34.107 11.154 34.107 10.454 34.107 9.753 33.96 9.136 33.668 8.602 33.388 8.054 32.994 7.628 32.485 7.322c-.509-.305-1.094-.458-1.755-.458C30.068 6.864 29.483 7.017 28.974 7.322 28.466 7.628 28.065 8.054 27.773 8.602 27.48 9.136 27.334 9.753 27.334 10.454 27.334 11.154 27.48 11.771 27.773 12.306 28.065 12.84 28.466 13.26 28.974 13.566 29.483 13.871 30.068 14.024 30.73 14.024zM51.92 9.136v5.575C51.92 15.017 51.837 15.252 51.672 15.418 51.519 15.583 51.284 15.666 50.966 15.666 50.661 15.666 50.425 15.59 50.26 15.437 50.095 15.271 50.012 15.029 50.012 14.711V6.177C50.012 5.871 50.095 5.636 50.26 5.47 50.425 5.305 50.661 5.222 50.966 5.222 51.284 5.222 51.519 5.305 51.672 5.47 51.837 5.623 51.92 5.858 51.92 6.177v.352C52.232 6.177 52.6 5.881 53.026 5.642 53.662 5.286 54.362 5.108 55.125 5.108S56.454 5.235 56.823 5.489c.381.242.527999999999999.535.439.879C57.223 6.546 57.147 6.686 57.033 6.788 56.931 6.877 56.81 6.934 56.67 6.96 56.53 6.985 56.378 6.979 56.212 6.94 55.398 6.775 54.667 6.762 54.018 6.902 53.37 7.042 52.855 7.303 52.473 7.685 52.104 8.067 51.92 8.551 51.92 9.136zM84.159 9.327v5.384C84.159 14.991 84.07 15.227 83.892 15.418 83.714 15.596 83.479 15.685 83.186 15.685 82.906 15.685 82.671 15.596 82.48 15.418 82.302 15.227 82.213 14.991 82.213 14.711V6.196C82.213 5.903 82.302 5.668 82.48 5.489 82.671 5.311 82.906 5.222 83.186 5.222 83.479 5.222 83.714 5.311 83.892 5.489 84.07 5.668 84.159 5.903 84.159 6.196v.203C84.442 6.12 84.767 5.88 85.132 5.68 85.806 5.311 86.563 5.127 87.402 5.127c.878.0 1.66.191 2.34699999999999.572C90.449 6.069 90.996 6.616 91.389 7.341 91.797 8.067 92 8.958 92 10.014v4.697C92 14.991 91.905 15.227 91.714 15.418 91.536 15.596 91.307 15.685 91.027 15.685 90.748 15.685 90.512 15.596 90.321 15.418 90.143 15.227 90.054 14.991 90.054 14.711V10.014C90.054 9.289 89.92 8.697 89.653 8.239 89.386 7.781 89.024 7.443 88.566 7.227 88.121 6.998 87.606 6.883 87.021 6.883 86.487 6.883 86.003 6.991 85.571 7.208 85.138 7.424 84.795 7.717 84.541 8.086 84.286 8.442 84.159 8.856 84.159 9.327zM42.737 15.742C41.706 15.742 40.797 15.52 40.008 15.074 39.22 14.616 38.597 13.992 38.139 13.203 37.694 12.401 37.471 11.485 37.471 10.454 37.471 9.41 37.694 8.493 38.139 7.704 38.597 6.902 39.22 6.279 40.008 5.833 40.797 5.375 41.706 5.146 42.737 5.146 43.754 5.146 44.657 5.375 45.446 5.833 46.234 6.279 46.851 6.902 47.296 7.704 47.754 8.493 47.983 9.41 47.983 10.454 47.983 11.485 47.76 12.401 47.315 13.203 46.87 13.992 46.253 14.616 45.465 15.074 44.676 15.52 43.767 15.742 42.737 15.742zm0-1.718C43.398 14.024 43.983 13.871 44.492 13.566 45 13.26 45.395 12.84 45.675 12.306 45.967 11.771 46.113 11.154 46.113 10.454 46.113 9.753 45.967 9.136 45.675 8.602 45.395 8.054 45 7.628 44.492 7.322 43.983 7.017 43.398 6.864 42.737 6.864 42.075 6.864 41.49 7.017 40.981 7.322 40.473 7.628 40.072 8.054 39.779 8.602 39.487 9.136 39.341 9.753 39.341 10.454 39.341 11.154 39.487 11.771 39.779 12.306 40.072 12.84 40.473 13.26 40.981 13.566 41.49 13.871 42.075 14.024 42.737 14.024zm19.654 1.718C61.398 15.742 60.502 15.513 59.701 15.055 58.912 14.584 58.282 13.948 57.812 13.146 57.354 12.344 57.125 11.44 57.125 10.434 57.125 9.429 57.335 8.532 57.755 7.742 58.187 6.94 58.772 6.31 59.51 5.852 60.247 5.381 61.08 5.146 62.009 5.146c.75.0 1.444.159 2.08.477C64.724 5.929 65.259 6.349 65.691 6.883V1.728C65.691 1.435 65.78 1.2 65.958 1.022 66.149.843 66.384.754 66.664.754 66.957.754 67.192.843 67.37 1.022 67.548 1.2 67.637 1.435 67.637 1.728v8.706C67.637 11.44 67.402 12.344 66.931 13.146 66.473 13.948 65.85 14.584 65.061 15.055 64.273 15.513 63.383 15.742 62.391 15.742zm0-1.718C63.039 14.024 63.618 13.871 64.127 13.566 64.635 13.248 65.036 12.815 65.329 12.267 65.621 11.72 65.767 11.109 65.767 10.434 65.767 9.747 65.621 9.136 65.329 8.602 65.036 8.067 64.635 7.647 64.127 7.341 63.618 7.023 63.039 6.864 62.391 6.864 61.755 6.864 61.176 7.023 60.654 7.341 60.146 7.647 59.739 8.067 59.433 8.602 59.141 9.136 58.995 9.747 58.995 10.434 58.995 11.109 59.141 11.72 59.433 12.267 59.739 12.815 60.146 13.248 60.654 13.566 61.176 13.871 61.755 14.024 62.391 14.024zm12.547 1.718C73.907 15.742 72.998 15.52 72.209 15.074 71.421 14.616 70.798 13.992 70.34 13.203 69.895 12.401 69.672 11.485 69.672 10.454 69.672 9.41 69.895 8.493 70.34 7.704 70.798 6.902 71.421 6.279 72.209 5.833 72.998 5.375 73.907 5.146 74.938 5.146c1.017.0 1.92.229 2.709.687C78.435 6.279 79.052 6.902 79.497 7.704 79.955 8.493 80.184 9.41 80.184 10.454 80.184 11.485 79.962 12.401 79.516 13.203 79.071 13.992 78.454 14.616 77.666 15.074 76.877 15.52 75.968 15.742 74.938 15.742zm0-1.718C75.599 14.024 76.184 13.871 76.693 13.566 77.202 13.26 77.596 12.84 77.876 12.306 78.168 11.771 78.314 11.154 78.314 10.454 78.314 9.753 78.168 9.136 77.876 8.602 77.596 8.054 77.202 7.628 76.693 7.322 76.184 7.017 75.599 6.864 74.938 6.864 74.276 6.864 73.691 7.017 73.182 7.322 72.674 7.628 72.273 8.054 71.981 8.602 71.688 9.136 71.542 9.753 71.542 10.454 71.542 11.154 71.688 11.771 71.981 12.306 72.273 12.84 72.674 13.26 73.182 13.566 73.691 13.871 74.276 14.024 74.938 14.024z" fill="#fff"/></svg></div><div class="flex items-center gap-2"><button @click=clearChat() title="Clear chat" class="cursor-pointer rounded p-2 text-white/80 transition-colors hover:bg-blue-500 hover:text-white" :disabled="messages.length === 0" :class="{ 'opacity-50 cursor-not-allowed': messages.length === 0 }">
<span class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M480-160q-133 0-226.5-93.5T160-480t93.5-226.5T480-8e2q85 0 149 34.5T740-671v-99q0-13 8.5-21.5T770-8e2t21.5 8.5T8e2-770v194q0 13-8.5 21.5T770-546H576q-13 0-21.5-8.5T546-576t8.5-21.5T576-606h138q-38-60-97-97t-137-37q-109 0-184.5 75.5T220-480t75.5 184.5T480-220q75 0 140-39.5T717-366q5-11 16.5-16.5t22.5-.5q12 5 16 16.5t-1 23.5q-39 84-117.5 133.5T480-160z"/></svg>
</span></button>
<button @click=$store.gordon.close() class="cursor-pointer rounded p-2 text-white/80 transition-colors hover:bg-blue-500 hover:text-white" title="Close chat" aria-label="Close chat">
<span class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M480-438 270-228q-9 9-21 9t-21-9-9-21 9-21l210-210-210-210q-9-9-9-21t9-21 21-9 21 9l210 210 210-210q9-9 21-9t21 9 9 21-9 21L522-480l210 210q9 9 9 21t-9 21-21 9-21-9L480-438z"/></svg></span></button></div></div><div x-ref=messagesContainer class="flex-1 space-y-4 p-6" :class="{ 'overflow-y-auto': messages.length > 0 }"><template x-if="messages.length === 0"><div class="flex h-full flex-col items-center justify-center text-center"><div class="mb-4 rounded-full bg-blue-100 p-4 dark:bg-blue-900"><span class="icon-svg text-blue-600 dark:text-blue-400"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18.5 7.84656v-5M5.5 20.8466v-5M16 5.34656h5M3 18.3466H8M6.5 1.84656 5.71554 3.41547c-.26549.53098-.39823.79647-.57557 1.02653C4.98261 4.64615 4.79959 4.82917 4.59545 4.98653c-.23007.17734-.49555.31008-1.02653.57557L2 6.34656l1.56892.78446c.53098.26549.79646.39823 1.02653.57557C4.79959 7.86395 4.98261 8.04696 5.13997 8.25111c.17734.23006.31008.49555.57557 1.02653L6.5 10.8466l.78446-1.56896C7.54995 8.74666 7.68269 8.48117 7.86003 8.25111 8.01739 8.04696 8.20041 7.86395 8.40455 7.70659 8.63462 7.52925 8.9001 7.3965 9.43108 7.13102L11 6.34656 9.43108 5.5621c-.53098-.26549-.79646-.39823-1.02653-.57557C8.20041 4.82917 8.01739 4.64615 7.86003 4.442c-.17734-.23006-.31008-.49555-.57557-1.02653L6.5 1.84656zM17 11.8466l-.9511 1.9022C15.7834 14.2798 15.6506 14.5453 15.4733 14.7753 15.3159 14.9795 15.1329 15.1625 14.9288 15.3199 14.6987 15.4972 14.4332 15.6299 13.9023 15.8954L12 16.8466l1.9023.9511C14.4332 18.0632 14.6987 18.1959 14.9288 18.3733 15.1329 18.5306 15.3159 18.7136 15.4733 18.9178c.177300000000001.23.3101.4955.5756 1.0265L17 21.8466l.9511-1.9023C18.2166 19.4133 18.3494 19.1478 18.5267 18.9178 18.6841 18.7136 18.8671 18.5306 19.0712 18.3733 19.3013 18.1959 19.5668 18.0632 20.0977 17.7977L22 16.8466 20.0977 15.8954C19.5668 15.6299 19.3013 15.4972 19.0712 15.3199 18.8671 15.1625 18.6841 14.9795 18.5267 14.7753 18.3494 14.5453 18.2166 14.2798 17.9511 13.7488L17 11.8466z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>
<rect width=24 height=24 fill=currentColor fill-opacity=1></g></svg></span></div><h3 class="mb-2 text-xl font-semibold text-gray-900 dark:text-white">Ask me about Docker</h3><p class="max-w-sm text-gray-600 dark:text-gray-400">Get instant answers to your Docker questions. I can help with
commands, concepts, troubleshooting, and best practices.</p><div class="mt-8 flex flex-col items-center gap-3 text-sm"><p class="mb-1 text-gray-500 dark:text-gray-400">Try asking:</p><button @click="currentQuestion = 'How do Docker Hardened Images work?'; askQuestion()" class="cursor-pointer rounded-lg border border-gray-200 bg-gray-50 px-4 py-2.5 text-gray-700 transition-opacity hover:opacity-70 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300">
How do Docker Hardened Images work?
</button>
<button @click="currentQuestion = 'What is MCP Toolkit?'; askQuestion()" class="cursor-pointer rounded-lg border border-gray-200 bg-gray-50 px-4 py-2.5 text-gray-700 transition-opacity hover:opacity-70 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300">
What is MCP Toolkit?
</button>
<button @click="currentQuestion = 'How do I create an org?'; askQuestion()" class="cursor-pointer rounded-lg border border-gray-200 bg-gray-50 px-4 py-2.5 text-gray-700 transition-opacity hover:opacity-70 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300">
How do I create an org?</button></div></div></template><template x-for="(message, index) in messages" :key=index><div :class="message.role === 'user' ? 'flex justify-end' : 'flex justify-start'"><div class="flex max-w-full flex-col gap-2"><div :class="message.role === 'user' ? 'bg-blue-500 dark:bg-blue-800 text-white' : 'max-w-none bg-gray-100 dark:bg-gray-800'" class="prose prose-sm dark:prose-invert rounded-lg px-4"><template x-if="!message.content && message.isStreaming"><div class="flex gap-1 py-3"><span class="inline-block h-2 w-2 animate-bounce rounded-full bg-current" style=animation-delay:0ms></span>
<span class="inline-block h-2 w-2 animate-bounce rounded-full bg-current" style=animation-delay:150ms></span>
<span class="inline-block h-2 w-2 animate-bounce rounded-full bg-current" style=animation-delay:300ms></span></div></template><template x-if=message.content><div x-html=formatMessageContent(message.content)></div></template></div><template x-if="message.role === 'assistant' && !message.isStreaming"><div class="flex flex-col gap-2"><div class="flex items-center gap-3 text-xs"><div class="flex items-center gap-1.5 text-gray-600 dark:text-gray-400"><span class="icon-svg icon-xs text-blue-500 dark:text-blue-400"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18.5 7.84656v-5M5.5 20.8466v-5M16 5.34656h5M3 18.3466H8M6.5 1.84656 5.71554 3.41547c-.26549.53098-.39823.79647-.57557 1.02653C4.98261 4.64615 4.79959 4.82917 4.59545 4.98653c-.23007.17734-.49555.31008-1.02653.57557L2 6.34656l1.56892.78446c.53098.26549.79646.39823 1.02653.57557C4.79959 7.86395 4.98261 8.04696 5.13997 8.25111c.17734.23006.31008.49555.57557 1.02653L6.5 10.8466l.78446-1.56896C7.54995 8.74666 7.68269 8.48117 7.86003 8.25111 8.01739 8.04696 8.20041 7.86395 8.40455 7.70659 8.63462 7.52925 8.9001 7.3965 9.43108 7.13102L11 6.34656 9.43108 5.5621c-.53098-.26549-.79646-.39823-1.02653-.57557C8.20041 4.82917 8.01739 4.64615 7.86003 4.442c-.17734-.23006-.31008-.49555-.57557-1.02653L6.5 1.84656zM17 11.8466l-.9511 1.9022C15.7834 14.2798 15.6506 14.5453 15.4733 14.7753 15.3159 14.9795 15.1329 15.1625 14.9288 15.3199 14.6987 15.4972 14.4332 15.6299 13.9023 15.8954L12 16.8466l1.9023.9511C14.4332 18.0632 14.6987 18.1959 14.9288 18.3733 15.1329 18.5306 15.3159 18.7136 15.4733 18.9178c.177300000000001.23.3101.4955.5756 1.0265L17 21.8466l.9511-1.9023C18.2166 19.4133 18.3494 19.1478 18.5267 18.9178 18.6841 18.7136 18.8671 18.5306 19.0712 18.3733 19.3013 18.1959 19.5668 18.0632 20.0977 17.7977L22 16.8466 20.0977 15.8954C19.5668 15.6299 19.3013 15.4972 19.0712 15.3199 18.8671 15.1625 18.6841 14.9795 18.5267 14.7753 18.3494 14.5453 18.2166 14.2798 17.9511 13.7488L17 11.8466z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>
<rect width=24 height=24 fill=currentColor fill-opacity=1></g></svg>
</span><span class=font-medium>Was this helpful?</span></div><div class="flex items-center gap-2"><button @click="submitFeedback(index, 'positive')" :class="message.feedback === 'positive'
? 'bg-green-100 text-green-700 ring ring-green-500 dark:bg-green-900/50 dark:text-green-400 dark:ring-green-600'
: 'bg-gray-100 text-gray-600 hover:bg-green-50 hover:text-green-600 hover:ring hover:ring-green dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-green-900/30 dark:hover:text-green-400 dark:hover:ring-green'" class="cursor-pointer rounded-full px-3 py-1.5 transition-all duration-200 flex items-center gap-1.5" title=Helpful>
<span class="icon-svg icon-sm transition-transform"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M860-632q23 0 41.5 18.5T920-572v82q0 11-2.5 25.5T910-439L794-171q-9 21-29.5 36T721-120H314q-25 0-42.5-17.5T254-180v-428q0-11 4.5-22t12.5-19l207-218q14-14 33.5-17t36.5 7 25.5 28 4.5 37l-38 180h320zM137-120q-23 0-40-17t-17-40v-398q0-23 17-40t40-17 40 17 17 40v398q0 23-17 40t-40 17z"/></svg>
</span><span class="hidden sm:inline font-medium">Helpful</span>
</button>
<button @click="submitFeedback(index, 'negative')" :class="message.feedback === 'negative'
? 'bg-red-100 text-red-700 ring ring-red-500 dark:bg-red-900/50 dark:text-red-400 dark:ring-red-600'
: 'bg-gray-100 text-gray-600 hover:bg-red-50 hover:text-red-600 hover:ring hover:ring-red dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-red-900/30 dark:hover:text-red-400 dark:hover:ring-red'" class="cursor-pointer rounded-full px-3 py-1.5 transition-all duration-200 flex items-center gap-1.5" title="Not quite">
<span class="icon-svg icon-sm transition-transform"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M1e2-328q-23 0-41.5-18.5T40-388v-82q0-11 2.5-25.5T50-521l116-268q9-21 29.5-36t43.5-15h407q25 0 42.5 17.5T706-780v428q0 11-4.5 22T689-311L482-93q-14 14-33.5 17T412-83t-25.5-28-4.5-37l38-180H1e2zm723-512q23 0 40 17t17 40v398q0 23-17 40t-40 17-40-17-17-40v-398q0-23 17-40t40-17z"/></svg>
</span><span class="hidden sm:inline font-medium">Not quite</span></button></div><div class="h-4 w-px bg-gray-300 dark:bg-gray-600"></div><button @click=copyAnswer(index) class="cursor-pointer rounded-full px-3 py-1.5 transition-all duration-200 flex items-center gap-1.5 bg-gray-100 text-gray-600 hover:bg-blue-50 hover:text-blue-700 hover:ring hover:ring-blue dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-blue-900/30 dark:hover:text-blue-300 dark:hover:ring-blue-400" :title="message.copied ? 'Copied!' : 'Copy answer'">
<span x-show="message.copied !== true" class="icon-svg icon-sm"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg>
</span><span x-show="message.copied === true" class="icon-svg icon-sm"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg>
</span><span class="hidden sm:inline font-medium">Copy</span></button></div><template x-if=message.feedbackError><div x-transition:enter="transition ease-out duration-200" x-transition:enter-start="opacity-0 translate-y-1" x-transition:enter-end="opacity-100 translate-y-0" class="flex items-center gap-1.5 text-xs text-red-600 dark:text-red-400"><span x-text=message.feedbackError></span></div></template></div></template></div></div></template><template x-if=error><div class="rounded-lg border border-red-200 bg-red-50 p-4 text-red-800 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400"><p class=text-sm x-text=error></p></div></template><template x-if=shouldShowCountdown()><div class="rounded-lg border border-yellow-200 bg-yellow-50 p-3 text-yellow-800 dark:border-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400"><p class=text-sm><span x-text=getRemainingTurns()></span>
<span x-text="getRemainingTurns() === 1 ? 'question' : 'questions'"></span>
remaining in this thread.</p></div></template><template x-if=isThreadLimitReached()><div class="rounded-lg border border-blue-200 bg-blue-50 p-4 text-blue-800 dark:border-blue-800 dark:bg-blue-900/20 dark:text-blue-400"><p class="mb-3 text-sm">You've reached the maximum of
<span x-text=maxTurnsPerThread></span> questions per thread. For
better answer quality, start a new thread.</p><button @click=clearChat() class="cursor-pointer rounded-lg bg-blue-600 px-4 py-2 text-sm font-semibold text-white transition-colors hover:bg-blue-700 dark:bg-blue-500 dark:hover:bg-blue-600">
Start a new thread</button></div></template></div><div class="border-t border-gray-200 p-4 dark:border-gray-700"><form @submit.prevent=askQuestion() class=space-y-2><div class="flex items-center gap-2"><div class="relative flex-1 self-stretch"><textarea x-ref=input x-model=currentQuestion @input="$el.style.height = 'auto'; $el.style.height = $el.scrollHeight + 'px'" @keydown.enter="if (!$event.shiftKey) { $event.preventDefault(); askQuestion() }" placeholder="Ask a question about Docker..." rows=1 :disabled="isLoading || isThreadLimitReached()" class="block min-h-[3rem] w-full resize-none rounded-lg border border-gray-300 p-3 leading-normal focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 focus:outline-none disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:focus:border-blue-400" :class="{ 'cursor-not-allowed': isThreadLimitReached() }"></textarea></div><button type=submit :disabled="!currentQuestion.trim() || isLoading || isThreadLimitReached()" :title="isLoading ? 'Sending...' : (isThreadLimitReached() ? 'Thread limit reached. Start a new thread.' : 'Send question')" class="cursor-pointer rounded-lg bg-blue-600 px-4 py-3 font-semibold text-white transition-colors hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50">
<template x-if=!isLoading><span class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M162-178q-15 6-28.5-2.5T120-205v-2e2l302-75-302-77v-198q0-16 13.5-24.5T162-782l652 274q18 8 18 28t-18 28L162-178z"/></svg>
</span></template><template x-if=isLoading><span class="icon-svg animate-spin"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M480-80q-84 0-157-31t-127-85-85-127T80-480t31-157 85-127 127-85 157-31q12 0 21 9t9 21-9 21-21 9q-141 0-240.5 99.5T140-480t99.5 240.5T480-140t240.5-99.5T820-480q0-12 9-21t21-9 21 9 9 21q0 84-31 157t-85 127-127 85T480-80z"/></svg></span></template></button></div><div class="flex items-center justify-between" x-data="{ showTooltip: false }"><div class=relative><div x-show=showTooltip x-transition:enter="transition ease-out duration-100" x-transition:enter-start="opacity-0 scale-95" x-transition:enter-end="opacity-100 scale-100" x-transition:leave="transition ease-in duration-75" x-transition:leave-start="opacity-100 scale-100" x-transition:leave-end="opacity-0 scale-95" class="absolute bottom-full left-0 mb-2 w-56 rounded-lg bg-gray-900 p-2.5 text-xs text-white shadow-lg dark:bg-gray-700" style=display:none><div class=relative><p>When enabled, Gordon considers the current page you're viewing
to provide more relevant answers.</p><div class="absolute -bottom-3 left-4 h-2 w-2 rotate-45 bg-gray-900 dark:bg-gray-700"></div></div></div></div><a href=https://github.com/docker/docs/issues/23966 target=_blank rel="noopener noreferrer" class="text-xs text-gray-500 underline hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400">Share feedback</a></div></form></div><div class="rounded-b-lg border-t border-gray-200 bg-blue-50 px-4 py-3 text-xs text-gray-600 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400">Answers are generated based on the documentation.</div></div></div><style>#gordon-chat pre{background:#0d1117;border-radius:.25rem;padding:0;margin:.5rem 0;overflow-x:auto;white-space:pre}#gordon-chat pre code{background:#0d1117;color:#c9d1d9;padding:1rem;display:block;font-family:roboto mono,monospace;font-size:.875rem;line-height:1.5;white-space:pre;overflow-x:auto}#gordon-chat pre code *{white-space:pre}#gordon-chat .prose code.not-prose{background-color:#e5e7eb;color:#111827;padding:.2em .4em;border-radius:.25rem;font-family:roboto mono,monospace;font-size:.875em}.dark #gordon-chat .prose code.not-prose{background-color:#374151;color:#e5e7eb}</style><main class="relative flex w-full max-w-[1920px]"><div style=scroll-behavior:smooth x-data x-init="$nextTick(() => {
const container = $el; // The div with overflow
const item = document.getElementById('sidebar-current-page')
if (item) {
const containerTop = container.scrollTop;
const containerBottom = containerTop + container.clientHeight;
const itemTop = item.offsetTop - container.offsetTop;
const itemBottom = itemTop + item.offsetHeight;
// Scroll only if the item is out of view
if (itemBottom > containerBottom - 200) {
container.scrollTop = itemTop - (container.clientHeight / 2 - item.offsetHeight / 2);
}
}
})" class="bg-background-toc dark:bg-background-toc fixed top-0 z-40 hidden h-screen w-full flex-none overflow-x-hidden overflow-y-auto md:sticky md:top-16 md:z-auto md:block md:h-[calc(100vh-64px)] md:w-[320px]" :class="{ 'hidden': ! $store.showSidebar }"><div class="fixed bg-black/50 md:hidden" x-show=$store.showSidebar @click="openSidebar = false" x-transition.opacity></div><div class="bg-background-toc dark:bg-background-toc z-50 w-full p-3 md:block md:w-[300px]"><button class="my-4 md:hidden" @click="$store.showSidebar = false">
<span class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m275-450 147 147q9 9 8.5 21t-9.5 21-21 9-21-9L181-459q-9-9-9-21t9-21l199-199q9-9 21-9t21 9 9 21.5-9 21.5L275-510h496q13 0 21.5 8.5T801-480t-8.5 21.5T771-450H275z"/></svg></span>
Back</button><div class="px-2 py-4 md:hidden text-gray-700 dark:text-gray-200 card" x-data="{ expanded: false }"><div class="flex w-full items-center justify-between"><a class="hover:text-blue dark:hover:text-blue" href=https://docs.docker.com/manuals/><span class="icon-sm icon-svg pr-2"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M349-250h262q12.75.0 21.38-8.68 8.62-8.67 8.62-21.5.0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H349q-12.75.0-21.37 8.68-8.63 8.67-8.63 21.5.0 12.82 8.63 21.32 8.62 8.5 21.37 8.5zm0-170h262q12.75.0 21.38-8.68 8.62-8.67 8.62-21.5.0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H349q-12.75.0-21.37 8.68-8.63 8.67-8.63 21.5.0 12.82 8.63 21.32 8.62 8.5 21.37 8.5zM220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h336q12.44.0 23.72 5T599-862l183 183q8 8 13 19.28t5 23.72v496q0 24-18 42t-42 18H220zm331-584q0 12.75 8.63 21.37Q568.25-634 581-634h159L551-820v156z"/></svg></span>Manuals</a>
<button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span x-show="! expanded" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span x-cloak x-show=expanded class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul x-cloak x-show=expanded class="space-y-4 pt-4"><li><a class="hover:text-blue dark:hover:text-blue" href=/get-started/><span class="icon-sm icon-svg pr-2"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M479.87-325q-5.87.0-10.87-2t-10-7L308-485q-9-9.27-8.5-21.64.5-12.36 9.11-21.36 9.39-9 21.89-9t21.5 9l98 99v-341q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82.0 21.32 8.62 8.5 8.63 8.5 21.38v341l99-99q8.8-9 20.9-8.5t21.49 9.5q8.61 9 8.61 21.5t-9 21.5L501-334q-5 5-10.13 7-5.14 2-11 2zM220-160q-24 0-42-18t-18-42v-113q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82.0 21.32 8.62 8.5 8.63 8.5 21.38v113h520v-113q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82.0 21.32 8.62 8.5 8.63 8.5 21.38v113q0 24-18 42t-42 18H220z"/></svg></span>Get started</a></li><li><a class="hover:text-blue dark:hover:text-blue" href=/guides/><span class="icon-sm icon-svg pr-2"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M180-120q-24 0-42-18t-18-42v-6e2q0-24 18-42t42-18h6e2q24 0 42 18t18 42v6e2q0 24-18 42t-42 18H180zm3e2-660v252q0 9 7.5 13.5t15.5-.5l60-36q8-5 15-5t15 5l60 36q8 5 15.5.5T676-528v-252H480z"/></svg></span>Guides</a></li><li><a class="hover:text-blue dark:hover:text-blue" href=/reference/><span class="icon-sm icon-svg pr-2"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M140-160q-24 0-42-18t-18-42v-520q0-24 18-42t42-18h680q24 0 42 18t18 42v520q0 24-18 42t-42 18H140zm0-60h680v-436H140v436zm221-218-83-83q-9-9-8.5-21t9.5-21 21-9 21 9l104 104q9 9 9 21t-9 21L321-313q-9 9-21 9t-21-9-9-21 9-21l82-83zm159 150q-13 0-21.5-8.5T490-318t8.5-21.5T520-348h160q13 0 21.5 8.5T710-318t-8.5 21.5T680-288H520z"/></svg></span>Reference</a></li></ul></div><nav class="navbar-font flex flex-col mt-1 mx-1"><ul><div class=navbar-group><li class=navbar-group-font-title>Open source</li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/>Docker Engine</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/install/>Install</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/ubuntu/ title=Ubuntu>Ubuntu</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/debian/ title=Debian>Debian</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/rhel/ title=RHEL>RHEL</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/fedora/ title=Fedora>Fedora</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/raspberry-pi-os/ title="Raspberry Pi OS (32-bit / armhf)">Raspberry Pi OS (32-bit / armhf)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/centos/ title=CentOS>CentOS</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/sles/ title="SLES (s390x)">SLES (s390x)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/binaries/ title=Binaries>Binaries</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/install/linux-postinstall/ title="Post-installation steps">Post-installation steps</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/storage/>Storage</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/volumes/ title=Volumes>Volumes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/bind-mounts/ title="Bind mounts">Bind mounts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/tmpfs/ title="tmpfs mounts">tmpfs mounts</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/storage/drivers/>Storage drivers</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/select-storage-driver/ title="Select a storage driver">Select a storage driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/btrfs-driver/ title="BTRFS storage driver">BTRFS storage driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/device-mapper-driver/ title="Device Mapper storage driver (deprecated)">Device Mapper storage driver (deprecated)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/overlayfs-driver/ title="OverlayFS storage driver">OverlayFS storage driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/vfs-driver/ title="VFS storage driver">VFS storage driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/windowsfilter-driver/ title="windowsfilter storage driver">windowsfilter storage driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/drivers/zfs-driver/ title="ZFS storage driver">ZFS storage driver</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/storage/containerd/ title="containerd image store">containerd image store</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/network/>Networking</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/firewall-iptables/ title="Docker with iptables">Docker with iptables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/firewall-nftables/ title="Docker with nftables">Docker with nftables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/packet-filtering-firewalls/ title="Packet filtering and firewalls">Packet filtering and firewalls</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/port-publishing/ title="Port publishing and mapping">Port publishing and mapping</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/network/drivers/>Network drivers</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/drivers/bridge/ title="Bridge network driver">Bridge network driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/drivers/host/ title="Host network driver">Host network driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/drivers/ipvlan/ title="IPvlan network driver">IPvlan network driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/drivers/macvlan/ title="Macvlan network driver">Macvlan network driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/drivers/none/ title="None network driver">None network driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/drivers/overlay/ title="Overlay network driver">Overlay network driver</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/ca-certs/ title="CA certificates">CA certificates</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/network/links/ title="Legacy container links">Legacy container links</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Containers</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/containers/start-containers-automatically/ title="Start containers automatically">Start containers automatically</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/containers/multi-service_container/ title="Run multiple processes in a container">Run multiple processes in a container</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/containers/resource_constraints/ title="Resource constraints">Resource constraints</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/containers/gpu/ title="GPU access">GPU access</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/containers/runmetrics/ title="Runtime metrics">Runtime metrics</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/containers/run/ title="Running containers">Running containers</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
CLI</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/cli/completion/ title=Completion>Completion</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/cli/proxy/ title="Proxy configuration">Proxy configuration</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/cli/filter/ title="Filter commands">Filter commands</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/cli/formatting/ title="Format command and log output">Format command and log output</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/cli/otel/ title="OpenTelemetry for the Docker CLI">OpenTelemetry for the Docker CLI</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/daemon/>Daemon</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/start/ title="Start the daemon">Start the daemon</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/ipv6/ title="Use IPv6 networking">Use IPv6 networking</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/proxy/ title="Daemon proxy configuration">Daemon proxy configuration</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/live-restore/ title="Live restore">Live restore</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/alternative-runtimes/ title="Alternative container runtimes">Alternative container runtimes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/prometheus/ title="Collect Docker metrics with Prometheus">Collect Docker metrics with Prometheus</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/remote-access/ title="Configure remote access for Docker daemon">Configure remote access for Docker daemon</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/logs/ title="Read the daemon logs">Read the daemon logs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/daemon/troubleshoot/ title="Troubleshooting the Docker daemon">Troubleshooting the Docker daemon</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Manage resources</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/manage-resources/contexts/ title="Docker contexts">Docker contexts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/manage-resources/labels/ title="Docker object labels">Docker object labels</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/manage-resources/pruning/ title="Prune unused Docker objects">Prune unused Docker objects</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/logging/>Logs and metrics</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/configure/ title="Configure logging drivers">Configure logging drivers</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/log_tags/ title="Customize log driver output">Customize log driver output</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Logging drivers</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/awslogs/ title="Amazon CloudWatch Logs logging driver">Amazon CloudWatch Logs logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/etwlogs/ title="ETW logging driver">ETW logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/fluentd/ title="Fluentd logging driver">Fluentd logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/gcplogs/ title="Google Cloud Logging driver">Google Cloud Logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/gelf/ title="Graylog Extended Format logging driver">Graylog Extended Format logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/journald/ title="Journald logging driver">Journald logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/json-file/ title="JSON File logging driver">JSON File logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/local/ title="Local file logging driver">Local file logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/splunk/ title="Splunk logging driver">Splunk logging driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/drivers/syslog/ title="Syslog logging driver">Syslog logging driver</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/plugins/ title="Use a logging driver plugin">Use a logging driver plugin</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/logging/dual-logging/ title="Use docker logs with remote logging drivers">Use docker logs with remote logging drivers</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/security/>Security</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/security/rootless/>Rootless mode</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/rootless/tips/ title=Tips>Tips</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/rootless/troubleshoot/ title=Troubleshooting>Troubleshooting</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/antivirus/ title="Antivirus software and Docker">Antivirus software and Docker</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/apparmor/ title="AppArmor security profiles for Docker">AppArmor security profiles for Docker</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/security/trust/>Content trust in Docker</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/trust/trust_automation/ title="Automation with content trust">Automation with content trust</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/trust/trust_delegation/ title="Delegations for content trust">Delegations for content trust</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/trust/deploying_notary/ title="Deploy Notary Server with Compose">Deploy Notary Server with Compose</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/trust/trust_key_mng/ title="Manage keys for content trust">Manage keys for content trust</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/trust/trust_sandbox/ title="Play in a content trust sandbox">Play in a content trust sandbox</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/non-events/ title="Docker security non-events">Docker security non-events</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/userns-remap/ title="Isolate containers with a user namespace">Isolate containers with a user namespace</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/protect-access/ title="Protect the Docker daemon socket">Protect the Docker daemon socket</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/seccomp/ title="Seccomp security profiles for Docker">Seccomp security profiles for Docker</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/security/certificates/ title="Verify repository client with certificates">Verify repository client with certificates</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/swarm/>Swarm mode</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/admin_guide/ title="Administer and maintain a swarm of Docker Engines">Administer and maintain a swarm of Docker Engines</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/stack-deploy/ title="Deploy a stack to a swarm">Deploy a stack to a swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/services/ title="Deploy services to a swarm">Deploy services to a swarm</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/swarm/swarm-tutorial/>Getting started with Swarm mode</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/ title="Create a swarm">Create a swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/add-nodes/ title="Add nodes to the swarm">Add nodes to the swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/deploy-service/ title="Deploy a service to the swarm">Deploy a service to the swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/inspect-service/ title="Inspect a service on the swarm">Inspect a service on the swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/scale-service/ title="Scale the service in the swarm">Scale the service in the swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/delete-service/ title="Delete the service running on the swarm">Delete the service running on the swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/ title="Apply rolling updates to a service">Apply rolling updates to a service</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-tutorial/drain-node/ title="Drain a node on the swarm">Drain a node on the swarm</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
How swarm works</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/ title="How nodes work">How nodes work</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/ title="How services work">How services work</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/how-swarm-mode-works/pki/ title="Manage swarm security with public key infrastructure (PKI)">Manage swarm security with public key infrastructure (PKI)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/how-swarm-mode-works/swarm-task-states/ title="Swarm task states">Swarm task states</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/join-nodes/ title="Join nodes to a swarm">Join nodes to a swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm_manager_locking/ title="Lock your swarm to protect its encryption key">Lock your swarm to protect its encryption key</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/manage-nodes/ title="Manage nodes in a swarm">Manage nodes in a swarm</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/secrets/ title="Manage sensitive data with Docker secrets">Manage sensitive data with Docker secrets</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/networking/ title="Manage swarm service networks">Manage swarm service networks</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/raft/ title="Raft consensus in swarm mode">Raft consensus in swarm mode</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/swarm-mode/ title="Run Docker Engine in swarm mode">Run Docker Engine in swarm mode</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/configs/ title="Store configuration data using Docker Configs">Store configuration data using Docker Configs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/key-concepts/ title="Swarm mode key concepts">Swarm mode key concepts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/swarm/ingress/ title="Use Swarm mode routing mesh">Use Swarm mode routing mesh</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/deprecated/ title="Deprecated features">Deprecated features</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/engine/extend/>Docker Engine plugins</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/plugins_authorization/ title="Access authorization plugin">Access authorization plugin</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/plugins_logging/ title="Docker log driver plugins">Docker log driver plugins</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/plugins_network/ title="Docker network driver plugins">Docker network driver plugins</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/plugin_api/ title="Docker Plugin API">Docker Plugin API</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/plugins_volume/ title="Docker volume plugins">Docker volume plugins</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/config/ title="Plugin Config Version 1 of Plugin V2">Plugin Config Version 1 of Plugin V2</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/extend/legacy_plugins/ title="Use Docker Engine plugins">Use Docker Engine plugins</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Release notes</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/29/ title="Engine v29">Engine v29</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/28/ title="Engine v28">Engine v28</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/27/ title="Engine v27">Engine v27</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/26.1/ title="Engine v26.1">Engine v26.1</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/26.0/ title="Engine v26.0">Engine v26.0</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/25.0/ title="Engine v25.0">Engine v25.0</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/24.0/ title="Engine v24.0">Engine v24.0</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/23.0/ title="Engine v23.0">Engine v23.0</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/20.10/ title="Engine v20.10">Engine v20.10</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/19.03/ title="Engine v19.03">Engine v19.03</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.09/ title="Engine v18.09">Engine v18.09</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.06/ title="Engine v18.06">Engine v18.06</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.05/ title="Engine v18.05">Engine v18.05</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.04/ title="Engine v18.04">Engine v18.04</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.03/ title="Engine v18.03">Engine v18.03</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.02/ title="Engine v18.02">Engine v18.02</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/18.01/ title="Engine v18.01">Engine v18.01</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.12/ title="Engine v17.12">Engine v17.12</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.11/ title="Engine v17.11">Engine v17.11</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.10/ title="Engine v17.10">Engine v17.10</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.09/ title="Engine v17.09">Engine v17.09</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.07/ title="Engine v17.07">Engine v17.07</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.06/ title="Engine v17.06">Engine v17.06</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.05/ title="Engine v17.05">Engine v17.05</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.04/ title="Engine v17.04">Engine v17.04</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/17.03/ title="Engine v17.03">Engine v17.03</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/engine/release-notes/prior-releases/ title="Prior releases">Prior releases</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/>Docker Build</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Core concepts</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/concepts/overview/ title="Docker Build Overview">Docker Build Overview</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/concepts/dockerfile/ title="Dockerfile overview">Dockerfile overview</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/concepts/context/ title="Build context">Build context</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/checks/ title="Build checks">Build checks</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Building</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/multi-stage/ title=Multi-stage>Multi-stage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/variables/ title=Variables>Variables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/secrets/ title=Secrets>Secrets</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/multi-platform/ title=Multi-platform>Multi-platform</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/export/ title="Export binaries">Export binaries</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/cdi/ title="Container Device Interface (CDI)">Container Device Interface (CDI)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/best-practices/ title="Best practices">Best practices</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/building/base-images/ title="Base images">Base images</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/builders/>Builders</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/builders/drivers/>Build drivers</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/builders/drivers/docker-container/ title="Docker container driver">Docker container driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/builders/drivers/docker/ title="Docker driver">Docker driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/builders/drivers/kubernetes/ title="Kubernetes driver">Kubernetes driver</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/builders/drivers/remote/ title="Remote driver">Remote driver</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/builders/manage/ title="Manage builders">Manage builders</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/bake/>Bake</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/introduction/ title=Introduction>Introduction</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/targets/ title=Targets>Targets</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/inheritance/ title=Inheritance>Inheritance</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/variables/ title=Variables>Variables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/expressions/ title=Expressions>Expressions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/funcs/ title=Functions>Functions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/matrices/ title="Matrix targets">Matrix targets</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/contexts/ title=Contexts>Contexts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/reference/ title="Bake file reference">Bake file reference</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/stdlib/ title="Bake standard library functions">Bake standard library functions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/compose-file/ title="Building with Bake from a Compose file">Building with Bake from a Compose file</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/overrides/ title="Overriding configurations">Overriding configurations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/bake/remote-definition/ title="Remote Bake file definition">Remote Bake file definition</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/cache/>Cache</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/invalidation/ title="Build cache invalidation">Build cache invalidation</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/garbage-collection/ title="Build garbage collection">Build garbage collection</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/cache/backends/>Cache storage backends</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/backends/s3/ title="Amazon S3 cache">Amazon S3 cache</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/backends/azblob/ title="Azure Blob Storage cache">Azure Blob Storage cache</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/backends/gha/ title="GitHub Actions cache">GitHub Actions cache</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/backends/inline/ title="Inline cache">Inline cache</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/backends/local/ title="Local cache">Local cache</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/backends/registry/ title="Registry cache">Registry cache</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/cache/optimize/ title="Optimize cache usage in builds">Optimize cache usage in builds</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/ci/>CI</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/ci/github-actions/>GitHub Actions</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/annotations/ title=Annotations>Annotations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/attestations/ title=Attestations>Attestations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/checks/ title="Build checks">Build checks</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/secrets/ title="Build secrets">Build secrets</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/build-summary/ title="Build summary">Build summary</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/configure-builder/ title="BuildKit configuration">BuildKit configuration</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/cache/ title="Cache management">Cache management</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/copy-image-registries/ title="Copy image between registries">Copy image between registries</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/export-docker/ title="Export to Docker">Export to Docker</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/ci/github-actions/github-builder/>GitHub Builder
<span><span class="not-prose bg-green-500 dark:bg-green-700 rounded-sm px-1 text-xs text-white">New</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/github-builder/build/ title=Build>Build</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/github-builder/bake/ title=Bake>Bake</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/local-registry/ title="Local registry">Local registry</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/multi-platform/ title="Multi-platform image">Multi-platform image</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/named-contexts/ title="Named contexts">Named contexts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/push-multi-registries/ title="Push to multiple registries">Push to multiple registries</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/reproducible-builds/ title="Reproducible builds">Reproducible builds</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/share-image-jobs/ title="Share image between jobs">Share image between jobs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/manage-tags-labels/ title="Tags and labels">Tags and labels</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/test-before-push/ title="Test before push">Test before push</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/ci/github-actions/update-dockerhub-desc/ title="Update Docker Hub description">Update Docker Hub description</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/policies/>Validating builds
<span><span class="not-prose bg-blue-500 dark:bg-blue-400 rounded-sm px-1 text-xs text-white">Experimental</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/intro/ title=Introduction>Introduction</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/usage/ title=Usage>Usage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/validate-images/ title="Image validation">Image validation</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/validate-git/ title="Git validation">Git validation</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/examples/ title="Templates & examples">Templates & examples</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/testing/ title=Testing>Testing</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/debugging/ title=Debugging>Debugging</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/inputs/ title="Input reference">Input reference</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/policies/built-ins/ title="Built-in functions">Built-in functions</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Metadata</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/metadata/annotations/ title=Annotations>Annotations</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/metadata/attestations/>Build attestations</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/metadata/attestations/attestation-storage/ title="Image attestation storage">Image attestation storage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/metadata/attestations/slsa-provenance/ title="Provenance attestations">Provenance attestations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/metadata/attestations/sbom/ title="SBOM attestations">SBOM attestations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/metadata/attestations/slsa-definitions/ title="SLSA definitions">SLSA definitions</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/exporters/>Exporters</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/exporters/image-registry/ title="Image and registry exporters">Image and registry exporters</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/exporters/local-tar/ title="Local and tar exporters">Local and tar exporters</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/exporters/oci-docker/ title="OCI and Docker exporters">OCI and Docker exporters</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build/buildkit/>BuildKit</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/buildkit/toml-configuration/ title=buildkitd.toml>buildkitd.toml</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/buildkit/configure/ title="Configure BuildKit">Configure BuildKit</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/buildkit/frontend/ title="Custom Dockerfile syntax">Custom Dockerfile syntax</a></li><li class="navbar-entry-margin hover:text-blue hover:dark:text-blue-400"><a class="block w-full truncate" href=https://github.com/moby/buildkit/releases title="Dockerfile release notes">Dockerfile release notes</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Debugging</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build/debug/opentelemetry/ title="OpenTelemetry support">OpenTelemetry support</a></li></ul></li><li class="navbar-entry-margin hover:text-blue hover:dark:text-blue-400"><a class="block w-full truncate" href=https://github.com/docker/buildx/releases title="Build release notes">Build release notes</a></li></ul></li><li x-data="{ expanded: true }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/compose/>Docker Compose</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class=ml-3><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Introduction to Compose</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/intro/compose-application-model/ title="How Compose works">How Compose works</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/intro/features-uses/ title="Why use Compose?">Why use Compose?</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/intro/history/ title="History and development">History and development</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/compose/install/>Install</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/install/linux/ title=Plugin>Plugin</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/install/standalone/ title="Standalone (Legacy)">Standalone (Legacy)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/install/uninstall/ title=Uninstall>Uninstall</a></li></ul></li><li class="navbar-entry-margin hover:text-blue
navbar-entry-background-current
rounded-sm hover:dark:text-blue-400"><a aria-current=page id=sidebar-current-page class="block w-full truncate" href=https://docs.docker.com/compose/gettingstarted/ title=Quickstart>Quickstart</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
How-tos</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/project-name/ title="Specify a project name">Specify a project name</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/lifecycle/ title="Use lifecycle hooks">Use lifecycle hooks</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/profiles/ title="Use service profiles">Use service profiles</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/startup-order/ title="Control startup order">Control startup order</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/compose/how-tos/environment-variables/>Use environment variables</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/environment-variables/set-environment-variables/ title="Set environment variables">Set environment variables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/environment-variables/envvars-precedence/ title="Environment variables precedence">Environment variables precedence</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/environment-variables/envvars/ title="Pre-defined environment variables">Pre-defined environment variables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/ title=Interpolation>Interpolation</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/environment-variables/best-practices/ title="Best practices">Best practices</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/dependent-images/ title="Build dependent images">Build dependent images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/file-watch/ title="Use Compose Watch">Use Compose Watch</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/use-secrets/ title="Secrets in Compose">Secrets in Compose</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/networking/ title=Networking>Networking</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/compose/how-tos/multiple-compose-files/>Use multiple Compose files</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/multiple-compose-files/merge/ title=Merge>Merge</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/multiple-compose-files/extends/ title=Extend>Extend</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/multiple-compose-files/include/ title=Include>Include</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/gpu-support/ title="Enable GPU support">Enable GPU support</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/production/ title="Use Compose in production">Use Compose in production</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/oci-artifact/ title="OCI artifact applications">OCI artifact applications</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/how-tos/provider-services/ title="Use provider services">Use provider services</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/compose/bridge/>Compose Bridge</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/bridge/usage/ title=Usage>Usage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/bridge/customize/ title=Customize>Customize</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/bridge/use-model-runner/ title="Use Model Runner">Use Model Runner</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/compose-sdk/ title="Compose SDK">Compose SDK
<span><span class="not-prose bg-green-500 dark:bg-green-700 rounded-sm px-1 text-xs text-white">New</span></span></a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Support and feedback</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/support-and-feedback/faq/ title=FAQs>FAQs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/compose/support-and-feedback/feedback/ title="Give feedback">Give feedback</a></li></ul></li><li class="navbar-entry-margin hover:text-blue hover:dark:text-blue-400"><a class="block w-full truncate" href=https://github.com/docker/compose/releases title="Release notes">Release notes</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/testcontainers/ title=Testcontainers>Testcontainers</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/docker-agent/>Docker Agent
<span><span class="not-prose bg-violet-500 dark:bg-violet-400 rounded-sm px-1 text-xs text-white">Experimental</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/model-providers/ title="Model providers">Model providers</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/local-models/ title="Local models">Local models</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/tutorial/ title="Building a coding agent">Building a coding agent</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/best-practices/ title="Best practices">Best practices</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/sharing-agents/ title="Sharing agents">Sharing agents</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/docker-agent/integrations/>Integrations</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/integrations/a2a/ title=A2A>A2A</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/integrations/acp/ title=ACP>ACP</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/integrations/mcp/ title=MCP>MCP</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Reference</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/reference/config/ title="Configuration file">Configuration file</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/reference/toolsets/ title=Toolsets>Toolsets</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/reference/cli/ title=CLI>CLI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/reference/examples/ title=Examples>Examples</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/rag/ title=RAG>RAG</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/docker-agent/evals/ title=Evals>Evals</a></li></ul></li></div><div class=navbar-group><li class=navbar-group-font-title>AI</li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai-overview/ title=Overview>Overview</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/>MCP Catalog and Toolkit
<span><span class="not-prose bg-blue-500 dark:bg-blue-400 rounded-sm px-1 text-xs text-white">Beta</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/get-started/ title="Get started">Get started</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/catalog/ title=Catalog>Catalog</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/profiles/ title=Profiles>Profiles</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/toolkit/ title="Toolkit UI">Toolkit UI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/cli/ title="Use with CLI">Use with CLI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/dynamic-mcp/ title="Dynamic discovery">Dynamic discovery</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/ title=Gateway>Gateway</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/hub-mcp/ title="Hub MCP server">Hub MCP server</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/faqs/ title=FAQs>FAQs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/mcp-catalog-and-toolkit/e2b-sandboxes/ title="E2B sandboxes">E2B sandboxes</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/sandboxes/>Docker Sandboxes
<span><span class="not-prose bg-violet-500 dark:bg-violet-400 rounded-sm px-1 text-xs text-white">Experimental</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/get-started/ title="Get started">Get started</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/usage/ title=Usage>Usage</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/sandboxes/agents/>Agents</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/claude-code/ title="Claude Code">Claude Code</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/codex/ title=Codex>Codex</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/copilot/ title=Copilot>Copilot</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/gemini/ title=Gemini>Gemini</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/kiro/ title=Kiro>Kiro</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/opencode/ title=OpenCode>OpenCode</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/docker-agent/ title="Docker Agent">Docker Agent</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/agents/custom-environments/ title="Custom environments">Custom environments</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/architecture/ title=Architecture>Architecture</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/sandboxes/security/>Security model</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/security/isolation/ title="Isolation layers">Isolation layers</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/security/defaults/ title=Defaults>Defaults</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/security/credentials/ title=Credentials>Credentials</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/security/policy/ title=Policies>Policies</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/security/workspace/ title="Workspace trust">Workspace trust</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/troubleshooting/ title=Troubleshooting>Troubleshooting</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/faq/ title=FAQ>FAQ</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/sandboxes/docker-desktop/ title="Docker Desktop">Docker Desktop</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/model-runner/>Model Runner</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/get-started/ title="Get started with DMR">Get started with DMR</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/api-reference/ title="DMR REST API">DMR REST API</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/configuration/ title="Configuration options">Configuration options</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/examples/ title="DMR examples">DMR examples</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/ide-integrations/ title="IDE and tool integrations">IDE and tool integrations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/openwebui-integration/ title="Open WebUI integration">Open WebUI integration</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/model-runner/inference-engines/ title="Inference engines">Inference engines</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/ai/gordon/>Gordon
<span><span class="not-prose bg-blue-500 dark:bg-blue-400 rounded-sm px-1 text-xs text-white">Beta</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/use-cases/ title="Use cases">Use cases</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Concepts</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/concepts/capabilities/ title=Capabilities>Capabilities</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/concepts/data-privacy/ title="Data privacy">Data privacy</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
How-to guides</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/how-to/docker-desktop/ title="Docker Desktop">Docker Desktop</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/how-to/cli/ title=CLI>CLI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/how-to/permissions/ title=Permissions>Permissions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/gordon/how-to/configure-tools/ title="Configure tools">Configure tools</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
AI and Docker Compose</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/ai/compose/models-and-compose/ title="Use AI models in Compose">Use AI models in Compose</a></li></ul></li></div><div class=navbar-group><li class=navbar-group-font-title>Products</li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/dhi/>Docker Hardened Images
<span><span class="not-prose bg-green-500 dark:bg-green-700 rounded-sm px-1 text-xs text-white">New</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/get-started/ title=Quickstart>Quickstart</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/features/ title=Features>Features</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/dhi/explore/>Explore</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/what/ title="Hardened images">Hardened images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/build-process/ title="Build process">Build process</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/available/ title="Image types">Image types</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/scanner-integrations/ title="Scanner integrations">Scanner integrations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/test/ title="Image testing">Image testing</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/responsibility/ title="Responsibility overview">Responsibility overview</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/explore/feedback/ title=Feedback>Feedback</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/dhi/migration/>Migration</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/checklist/ title="Migration checklist">Migration checklist</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/migrate-with-ai/ title="AI-assisted migration">AI-assisted migration
<span><span class="not-prose bg-violet-500 dark:bg-violet-400 rounded-sm px-1 text-xs text-white">Experimental</span></span></a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/migrate-from-doi/ title="Migrate from Alpine or Debian">Migrate from Alpine or Debian</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/migrate-from-ubuntu/ title="Migrate from Ubuntu">Migrate from Ubuntu</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/migrate-from-wolfi/ title="Migrate from Wolfi">Migrate from Wolfi</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/dhi/migration/examples/>Migration examples</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/examples/go/ title=Go>Go</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/examples/python/ title=Python>Python</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/migration/examples/node/ title=Node.js>Node.js</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/dhi/how-to/>How-tos</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/explore/ title="Explore images">Explore images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/mirror/ title="Mirror a repository">Mirror a repository</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/customize/ title="Customize an image or chart">Customize an image or chart</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/build/ title="Create and build an image">Create and build an image</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/use/ title="Use an image">Use an image</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/hardened-packages/ title="Use hardened packages">Use hardened packages</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/k8s/ title="Use an image in Kubernetes">Use an image in Kubernetes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/helm/ title="Use a Helm chart">Use a Helm chart</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/manage/ title="Manage images and charts">Manage images and charts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/els/ title="Use Extended Lifecycle Support">Use Extended Lifecycle Support</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/compare/ title="Compare images">Compare images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/verify/ title="Verify an image or chart">Verify an image or chart</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/scan/ title="Scan an image">Scan an image</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/policies/ title="Enforce image usage">Enforce image usage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/cli/ title="Use the CLI">Use the CLI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/debug/ title="Debug a container">Debug a container</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/how-to/select-enterprise/ title="Use DHI Select & Enterprise">Use DHI Select & Enterprise</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/dhi/core-concepts/>Core concepts</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/attestations/ title=Attestations>Attestations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/cis/ title="CIS Benchmark">CIS Benchmark</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/signatures/ title="Code signing">Code signing</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/cves/ title=CVEs>CVEs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/distroless/ title="Distroless images">Distroless images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/fips/ title=FIPS>FIPS</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/glibc-musl/ title="glibc and musl">glibc and musl</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/hardening/ title=Hardening>Hardening</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/digests/ title="Image digests">Image digests</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/provenance/ title="Image provenance">Image provenance</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/immutability/ title=Immutability>Immutability</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/sbom/ title=SBOMs>SBOMs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/slsa/ title=SLSA>SLSA</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/sscs/ title="Software Supply Chain Security">Software Supply Chain Security</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/ssdlc/ title=SSDLC>SSDLC</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/stig/ title=STIG>STIG</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/core-concepts/vex/ title=VEX>VEX</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/troubleshoot/ title=Troubleshoot>Troubleshoot</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/dhi/resources/ title="Additional resources">Additional resources</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/desktop/>Docker Desktop</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Setup</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Install</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/mac-install/ title=Mac>Mac</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/mac-permission-requirements/ title="Mac permission requirements">Mac permission requirements</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/windows-install/ title=Windows>Windows</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/windows-permission-requirements/ title="Windows permission requirements">Windows permission requirements</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/desktop/setup/install/linux/>Linux</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/linux/ubuntu/ title=Ubuntu>Ubuntu</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/linux/debian/ title=Debian>Debian</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/linux/fedora/ title=Fedora>Fedora</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/linux/archlinux/ title=Arch>Arch</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/install/linux/rhel/ title=RHEL>RHEL</a></li></ul></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/vm-vdi/ title="VM or VDI environments">VM or VDI environments</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/sign-in/ title="Sign in">Sign in</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/setup/allow-list/ title=Allowlist>Allowlist</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/desktop/use-desktop/>Explore Docker Desktop</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/container/ title=Containers>Containers</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/images/ title=Images>Images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/volumes/ title=Volumes>Volumes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/builds/ title=Builds>Builds</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/kubernetes/ title=Kubernetes>Kubernetes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/logs/ title=Logs>Logs
<span><span class="not-prose bg-blue-500 dark:bg-blue-400 rounded-sm px-1 text-xs text-white">Beta</span></span></a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/resource-saver/ title="Resource Saver mode">Resource Saver mode</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/use-desktop/pause/ title="Pause Docker Desktop">Pause Docker Desktop</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Features and capabilities</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/desktop/features/networking/>Networking</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/networking/networking-how-tos/ title=How-tos>How-tos</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/gpu/ title="GPU support">GPU support</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/usbip/ title="USB/IP support">USB/IP support</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/synchronized-file-sharing/ title="Synchronized file shares">Synchronized file shares</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/containerd/ title="containerd image store">containerd image store</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/wasm/ title="Wasm workloads">Wasm workloads
<span><span class="not-prose bg-blue-500 dark:bg-blue-400 rounded-sm px-1 text-xs text-white">Beta</span></span></a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/desktop-cli/ title="Docker Desktop CLI">Docker Desktop CLI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/vmm/ title="Virtual Machine Manager">Virtual Machine Manager</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/desktop/features/wsl/>WSL</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/wsl/best-practices/ title="Best practices">Best practices</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/wsl/custom-kernels/ title="Custom kernels">Custom kernels</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/features/wsl/use-wsl/ title="Use WSL">Use WSL</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Settings and maintenance</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/settings-and-maintenance/settings/ title="Change settings">Change settings</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/settings-and-maintenance/backup-and-restore/ title="Backup and restore data">Backup and restore data</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Troubleshoot and support</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/desktop/troubleshoot-and-support/troubleshoot/>Troubleshoot and diagnose</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/troubleshoot/topics/ title="Common topics">Common topics</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/troubleshoot/known-issues/ title="Known issues">Known issues</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/troubleshoot/mac-damaged-dialog/ title="MacOS app damaged dialog">MacOS app damaged dialog</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
FAQs</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/faqs/general/ title=General>General</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/faqs/macfaqs/ title=Mac>Mac</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/faqs/windowsfaqs/ title=Windows>Windows</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/faqs/linuxfaqs/ title=Linux>Linux</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/faqs/releases/ title=Releases>Releases</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/troubleshoot-and-support/feedback/ title="Give feedback">Give feedback</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/uninstall/ title=Uninstall>Uninstall</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/desktop/release-notes/ title="Release notes">Release notes</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/offload/>Docker Offload
<span><span class="not-prose bg-violet-500 dark:bg-violet-400 rounded-sm px-1 text-xs text-white">Early Access</span></span></a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/quickstart/ title=Quickstart>Quickstart</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/about/ title=About>About</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/configuration/ title=Configure>Configure</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/usage/ title="Usage & billing">Usage & billing</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/optimize/ title="Optimize usage">Optimize usage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/troubleshoot/ title=Troubleshoot>Troubleshoot</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/offload/feedback/ title="Give feedback">Give feedback</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/build-cloud/>Docker Build Cloud</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build-cloud/setup/ title=Setup>Setup</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build-cloud/usage/ title=Usage>Usage</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build-cloud/ci/ title="Continuous integration">Continuous integration</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build-cloud/optimization/ title=Optimization>Optimization</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build-cloud/builder-settings/ title="Builder settings">Builder settings</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/build-cloud/release-notes/ title="Release notes">Release notes</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/>Docker Hub</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/quickstart/ title=Quickstart>Quickstart</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/image-library/>Library</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/image-library/search/ title=Search>Search</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/image-library/trusted-content/ title="Trusted content">Trusted content</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/image-library/catalogs/ title=Catalogs>Catalogs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/image-library/mirror/ title=Mirror>Mirror</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/repos/>Repositories</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/create/ title=Create>Create</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Manage</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/information/ title="Repository information">Repository information</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/access/ title=Access>Access</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/>Images</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/tags/ title=Tags>Tags</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/immutable-tags/ title="Immutable tags">Immutable tags</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/manage/ title="Image Management">Image Management</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/oci-artifacts/ title="Software artifacts">Software artifacts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/push/ title="Push images">Push images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/move/ title="Move images">Move images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/hub-images/bulk-migrate/ title="Bulk migrate images">Bulk migrate images</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/vulnerability-scanning/ title="Image security insights">Image security insights</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/webhooks/ title=Webhooks>Webhooks</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/repos/manage/builds/>Automated builds</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/builds/setup/ title="Set up">Set up</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/builds/link-source/ title="Link accounts">Link accounts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/builds/automated-testing/ title="Automated repository tests">Automated repository tests</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/builds/advanced/ title="Advanced options">Advanced options</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/builds/manage-builds/ title="Manage autobuilds">Manage autobuilds</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/builds/troubleshoot/ title=Troubleshoot>Troubleshoot</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/repos/manage/trusted-content/>Trusted content</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/trusted-content/official-images/ title="Docker Official Images">Docker Official Images</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/trusted-content/dvp-program/ title="Docker Verified Publisher Program">Docker Verified Publisher Program</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/trusted-content/dsos-program/ title="Docker-Sponsored Open Source Program">Docker-Sponsored Open Source Program</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/trusted-content/insights-analytics/ title="Insights and analytics">Insights and analytics</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/manage/export/ title="Export repositories">Export repositories</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/archive/ title=Archive>Archive</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/repos/delete/ title=Delete>Delete</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/settings/ title=Settings>Settings</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/docker-hub/usage/>Usage and limits</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/usage/pulls/ title=Pulls>Pulls</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/usage/manage/ title="Optimize usage">Optimize usage</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/troubleshoot/ title=Troubleshoot>Troubleshoot</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/docker-hub/release-notes/ title="Release notes">Release notes</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/scout/>Docker Scout</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/install/ title=Install>Install</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/quickstart/ title=Quickstart>Quickstart</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Explore</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/explore/dashboard/ title=Dashboard>Dashboard</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/explore/analysis/ title="Docker Scout image analysis">Docker Scout image analysis</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/explore/metrics-exporter/ title="Docker Scout metrics exporter">Docker Scout metrics exporter</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/explore/image-details-view/ title="Image details view">Image details view</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/explore/exceptions/ title="Manage vulnerability exceptions">Manage vulnerability exceptions</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
How-tos</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/how-tos/create-exceptions-gui/ title="Create an exception using the GUI">Create an exception using the GUI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/how-tos/create-exceptions-vex/ title="Create an exception using the VEX">Create an exception using the VEX</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/how-tos/configure-cli/ title="Docker Scout environment variables">Docker Scout environment variables</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/how-tos/view-create-sboms/ title="Docker Scout SBOMs">Docker Scout SBOMs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/how-tos/artifact-types/ title="Use Scout with different artifact types">Use Scout with different artifact types</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Deep dive</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/deep-dive/advisory-db-sources/ title="Advisory database sources and matching service">Advisory database sources and matching service</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/deep-dive/data-handling/ title="Data collection and storage in Docker Scout">Data collection and storage in Docker Scout</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/scout/policy/>Policy Evaluation</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/policy/configure/ title="Configure policies">Configure policies</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/policy/scores/ title="Docker Scout health scores">Docker Scout health scores</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/policy/ci/ title="Evaluate policy compliance in CI">Evaluate policy compliance in CI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/policy/remediation/ title="Remediation with Docker Scout">Remediation with Docker Scout</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/policy/view/ title="View Docker Scout policy status">View Docker Scout policy status</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/scout/integrations/>Integrations</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Code quality</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/code-quality/sonarqube/ title=SonarQube>SonarQube</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Container registries</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/registry/ecr/ title="Amazon ECR">Amazon ECR</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/registry/artifactory/ title="Artifactory Container Registry">Artifactory Container Registry</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/registry/acr/ title="Azure Container Registry">Azure Container Registry</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/scout/integrations/ci/>Continuous Integration</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/ci/azure/ title="Azure DevOps Pipelines">Azure DevOps Pipelines</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/ci/circle-ci/ title="Circle CI">Circle CI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/ci/gha/ title="GitHub Actions">GitHub Actions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/ci/gitlab/ title="GitLab CI/CD">GitLab CI/CD</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/ci/jenkins/ title=Jenkins>Jenkins</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/scout/integrations/environment/>Integrating Docker Scout with environments</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/environment/cli/ title="Generic (CLI)">Generic (CLI)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/environment/sysdig/ title=Sysdig>Sysdig</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Source code management</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/source-code-management/github/ title=GitHub>GitHub</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Team collaboration</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/integrations/team-collaboration/slack/ title=Slack>Slack</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Release notes</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue hover:dark:text-blue-400"><a class="block w-full truncate" href=https://github.com/docker/scout-cli/releases title="CLI release notes">CLI release notes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/scout/release-notes/platform/ title="Platform release notes">Platform release notes</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/extensions/>Docker Extensions</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/marketplace/ title="Marketplace extensions">Marketplace extensions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/non-marketplace/ title="Non-marketplace extensions">Non-marketplace extensions</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/private-marketplace/ title="Configure a private marketplace">Configure a private marketplace</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/settings-feedback/ title="Settings and feedback">Settings and feedback</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/extensions/extensions-sdk/>Extensions SDK</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/process/ title="The build and publish process">The build and publish process</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/quickstart/ title=Quickstart>Quickstart</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Part one: Build</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/build/minimal-frontend-extension/ title="Create a simple extension">Create a simple extension</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/build/frontend-extension-tutorial/ title="Create an advanced frontend extension">Create an advanced frontend extension</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/build/backend-extension-tutorial/ title="Add a backend to your extension">Add a backend to your extension</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/extensions/extensions-sdk/extensions/>Part two: Publish</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/extensions/labels/ title="Add labels">Add labels</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/extensions/validate/ title=Validate>Validate</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/extensions/DISTRIBUTION/ title="Package and release your extension">Package and release your extension</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/extensions/share/ title="Share your extension">Share your extension</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/extensions/publish/ title="Publish in the Marketplace">Publish in the Marketplace</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/extensions/multi-arch/ title="Build multi-arch extensions">Build multi-arch extensions</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/extensions/extensions-sdk/architecture/>Architecture</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/architecture/metadata/ title=Metadata>Metadata</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/architecture/security/ title=Security>Security</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/extensions/extensions-sdk/design/>Design and UI styling</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/design/design-guidelines/ title=Guidelines>Guidelines</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/design/design-principles/ title="Docker design principles">Docker design principles</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/design/mui-best-practices/ title="MUI best practices">MUI best practices</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Developer Guides</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/guides/oauth2-flow/ title=Authentication>Authentication</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/guides/kubernetes/ title="Interacting with Kubernetes">Interacting with Kubernetes</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/guides/invoke-host-binaries/ title="Invoke host binaries">Invoke host binaries</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/guides/use-docker-socket-from-backend/ title="Use the Docker socket">Use the Docker socket</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Developer SDK tools</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/test-debug/ title="Test and debug">Test and debug</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/continuous-integration/ title="Continuous Integration (CI)">Continuous Integration (CI)</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/usage/ title="CLI reference">CLI reference</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Extension APIs</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/api/dashboard/ title=Dashboard>Dashboard</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/api/docker/ title=Docker>Docker</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/api/backend/ title="Extension Backend">Extension Backend</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/api/overview/ title="Extension UI API">Extension UI API</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/extensions/extensions-sdk/dev/api/dashboard-routes-navigation/ title=Navigation>Navigation</a></li></ul></li></ul></li></ul></li></ul></li><li class="navbar-entry-margin hover:text-blue hover:dark:text-blue-400"><a class="block w-full truncate" href=https://testcontainers.com/cloud/docs/ title="Testcontainers Cloud">Testcontainers Cloud</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/retired/ title="Deprecated products and features">Deprecated products and features</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/release-lifecycle/ title="Release lifecycle">Release lifecycle</a></li></div><div class=navbar-group><li class=navbar-group-font-title>Platform</li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/support/>Support</a></div></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/billing/>Billing</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/payment-method/ title="Add or update a payment method">Add or update a payment method</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/details/ title="Manage your billing information">Manage your billing information</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/3d-secure/ title="3D Secure authentication">3D Secure authentication</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/history/ title="Invoices and billing history">Invoices and billing history</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/cycle/ title="Change your billing cycle">Change your billing cycle</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/tax-certificate/ title="Submit a tax exemption certificate">Submit a tax exemption certificate</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/billing/faqs/ title=FAQs>FAQs</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/accounts/>Docker accounts</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/accounts/general-faqs/ title=Accounts>Accounts</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/accounts/create-account/ title="Create an account">Create an account</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/accounts/manage-account/ title="Manage an account">Manage an account</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/accounts/deactivate-user-account/ title="Deactivate an account">Deactivate an account</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/security/>Security</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/security/access-tokens/ title="Personal access tokens">Personal access tokens</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/security/2fa/>Two-factor authentication</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/security/2fa/recover-hub-account/ title="Recover your Docker account">Recover your Docker account</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
FAQs</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/security/faqs/general/ title=General>General</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/security/faqs/containers/ title=Container>Container</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/security/faqs/networking-and-vms/ title="Network and VM">Network and VM</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/security/security-announcements/ title="Security announcements">Security announcements</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/subscription/>Subscription</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue hover:dark:text-blue-400"><a class="block w-full truncate" href="https://www.docker.com/pricing?ref=Docs&amp;refAction=DocsSubscriptionDetails" title="Compare subscription">Compare subscription</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/subscription/setup/ title="Set up your subscription">Set up your subscription</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/subscription/scale/ title="Scale your subscription">Scale your subscription</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/subscription/manage-seats/ title="Manage seats">Manage seats</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/subscription/change/ title="Change your subscription">Change your subscription</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/subscription/desktop-license/ title="Docker Desktop license agreement">Docker Desktop license agreement</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/subscription/faq/ title=FAQs>FAQs</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/platform-release-notes/ title="Release notes">Release notes</a></li></div><div class=navbar-group><li class=navbar-group-font-title>Enterprise</li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/admin/>Administration</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/admin/organization/>Organization administration</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/orgs/ title="Create your organization">Create your organization</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/onboard/ title="Onboard your organization">Onboard your organization</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/members/ title="Manage organization members">Manage organization members</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/convert-account/ title="Convert an account into an organization">Convert an account into an organization</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/manage-a-team/ title="Create and manage a team">Create and manage a team</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/deactivate-account/ title="Deactivate an organization">Deactivate an organization</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/manage-products/ title="Manage Docker products">Manage Docker products</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/activity-logs/ title="Activity logs">Activity logs</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/general-settings/ title="Organization information">Organization information</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/organization/insights/ title=Insights>Insights</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/admin/company/>Company administration overview</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/company/new-company/ title="Create a company">Create a company</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/company/users/ title="Manage company members">Manage company members</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/company/organizations/ title="Manage company organizations">Manage company organizations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/company/owners/ title="Manage company owners">Manage company owners</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
FAQ</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/faqs/organization-faqs/ title=Organization>Organization</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/admin/faqs/company-faqs/ title=Company>Company</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/enterprise-deployment/>Deploy Docker Desktop</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/msi-install-and-configure/ title="MSI installer">MSI installer</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/pkg-install-and-configure/ title="PKG installer">PKG installer</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/ms-store/ title="MS Store">MS Store</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/use-intune/ title="Deploy with Intune">Deploy with Intune</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/use-jamf-pro/ title="Deploy with Jamf Pro">Deploy with Jamf Pro</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/dev-box/ title="Microsoft Dev Box">Microsoft Dev Box</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/enterprise-deployment/faq/ title=FAQs>FAQs</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/>Security</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/single-sign-on/>Single sign-on</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/connect/ title="Set up">Set up</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/manage/ title="Manage connections">Manage connections</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
FAQs</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/faqs/general/ title=General>General</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/faqs/domain-faqs/ title=Domains>Domains</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/faqs/enforcement-faqs/ title=Enforcement>Enforcement</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/faqs/idp-faqs/ title="Identity providers">Identity providers</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/single-sign-on/faqs/users-faqs/ title="User management">User management</a></li></ul></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/provisioning/>Provision</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/provisioning/just-in-time/ title=Just-in-Time>Just-in-Time</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/provisioning/scim/ title=SCIM>SCIM</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/provisioning/group-mapping/ title="Group mapping">Group mapping</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/enforce-sign-in/>Enforce sign-in</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/enforce-sign-in/methods/ title=Configure>Configure</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/roles-and-permissions/>Roles and permissions</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/roles-and-permissions/core-roles/ title="Core roles">Core roles</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/roles-and-permissions/custom-roles/ title="Custom roles">Custom roles</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/domain-management/ title="Manage domains">Manage domains</a></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/hardened-desktop/>Hardened Docker Desktop</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/hardened-desktop/enhanced-container-isolation/>Enhanced Container Isolation</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/enhanced-container-isolation/enable-eci/ title="Enable ECI">Enable ECI</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/enhanced-container-isolation/config/ title="Configure advanced settings">Configure advanced settings</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/enhanced-container-isolation/limitations/ title=Limitations>Limitations</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/enhanced-container-isolation/faq/ title=FAQs>FAQs</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><a class="hover:text-blue block select-none hover:dark:text-blue-400" href=https://docs.docker.com/enterprise/security/hardened-desktop/settings-management/>Settings Management</a></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/settings-management/configure-json-file/ title="Use a JSON file">Use a JSON file</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/settings-management/configure-admin-console/ title="Use the Admin Console">Use the Admin Console</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/settings-management/compliance-reporting/ title="Desktop settings reporting">Desktop settings reporting</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/settings-management/settings-reference/ title="Settings reference">Settings reference</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/registry-access-management/ title="Registry Access Management">Registry Access Management</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/image-access-management/ title="Image Access Management">Image Access Management</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/namespace-access/ title="Namespace access">Namespace access</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/hardened-desktop/air-gapped-containers/ title="Air-gapped containers">Air-gapped containers</a></li></ul></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/security/access-tokens/ title="Organization access tokens">Organization access tokens</a></li></ul></li><li x-data="{ expanded: false }"><div class="flex w-full items-center justify-between rounded-sm"><div class="navbar-entry-margin w-full truncate"><button @click="expanded = !expanded" class="hover:text-blue w-full text-left select-none hover:dark:text-blue-400">
Troubleshoot</button></div><button @click="expanded = !expanded" class="rounded-sm hover:bg-gray-200 hover:dark:bg-gray-800">
<span :class="{ 'hidden' : expanded }" class=icon-svg><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M464-376 306-533q-2-2-3.5-4.76-1.5-2.77-1.5-5.92.0-6.32 4.13-10.82 4.12-4.5 10.87-4.5h328q6.75.0 10.88 4.64 4.12 4.63 4.12 10.81.0 1.55-5 10.55L496-376q-3 3-7.06 5t-8.94 2q-4.87.0-8.94-2-4.06-2-7.06-5z"/></svg>
</span><span :class="{ 'hidden' : !expanded }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M316-4e2q-6.75.0-10.87-4.64-4.13-4.63-4.13-10.81.0-1.55 5-10.55l158-157q3-3 7.06-5 4.07-2 8.94-2 4.88.0 8.94 2t7.06 5l158 157q2 2 3.5 4.76 1.5 2.77 1.5 5.92.0 6.32-4.12 10.82-4.13 4.5-10.88 4.5H316z"/></svg></span></button></div><ul :class="{ 'hidden' : !expanded }" class="hidden ml-3"><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/troubleshoot/troubleshoot-provisioning/ title="Troubleshoot provisioning">Troubleshoot provisioning</a></li><li class="navbar-entry-margin hover:text-blue rounded-sm hover:dark:text-blue-400"><a class="block w-full truncate" href=https://docs.docker.com/enterprise/troubleshoot/troubleshoot-sso/ title="Troubleshoot SSO">Troubleshoot SSO</a></li></ul></li></div></ul></nav></div></div><div data-pagefind-body class="dark:bg-background-dark w-full min-w-0 bg-white p-8"><meta data-pagefind-meta="description:Follow this hands-on tutorial to learn how to use Docker Compose from defining application dependencies to experimenting with commands."><meta data-pagefind-meta="keywords:docker, compose, example, docker, compose, tutorial, how, to, use, docker, compose, running, docker, compose, how, to, run, docker, compose, docker, compose, build, image, docker, compose, command, example, run, docker, compose, file, how, to, create, a, docker, compose, file, run, a, docker, compose, file"><meta data-pagefind-meta="breadcrumbs:Manuals / Docker Compose"><div class="flex w-full gap-8"><div class="min-w-0 flex-[2_2_0%]"><article class="prose dark:prose-invert max-w-4xl"><nav id=breadcrumbs data-pagefind-ignore class="breadcrumbs mb-4 flex min-w-0 items-center gap-2 text-gray-400 dark:text-gray-300"><a href=https://docs.docker.com/ class="link truncate">Home</a>
<span>/</span>
<a href=https://docs.docker.com/manuals/ class="link truncate">Manuals</a>
<span>/</span>
<a href=https://docs.docker.com/compose/ class="link truncate">Docker Compose</a>
<span>/</span>
<span class=truncate>Quickstart</span></nav><div class="flex items-start justify-between"><h1 data-pagefind-weight=10>Docker Compose Quickstart</h1><div class="md-dropdown ml-auto hidden lg:block"><div class="ml-3 relative inline-block" x-data="{ open: false }" @click.outside="open = false"><div class="flex shadow rounded-sm overflow-hidden border border-gray-200 dark:border-gray-700"><button onclick=copyMarkdown() data-heap-id=copy-markdown-button class="bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700 flex cursor-pointer items-center gap-2 px-3 py-2 text-sm transition-colors whitespace-nowrap text-gray-900 dark:text-white">
<span class="icon-svg icon-sm"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg>
</span><span class="icon-svg icon-sm hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg>
</span><span>Copy as Markdown</span>
</button>
<button @click="open = !open" type=button data-heap-id=markdown-dropdown-toggle class="bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center justify-center px-2 border-l border-gray-200 dark:border-gray-700 transition-colors text-gray-900 dark:text-white" aria-label="More options">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg></button></div><div x-show=open x-collapse x-cloak class="absolute right-0 top-full mt-1 min-w-full bg-white dark:bg-gray-800 rounded-sm shadow-lg overflow-hidden z-50 border border-gray-200 dark:border-gray-700" data-heap-id=markdown-dropdown-menu><button onclick=viewPlainText() data-heap-id=view-markdown-button class="flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 whitespace-nowrap">
<span class="icon-svg icon-sm"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M180-120q-24 0-42-18t-18-42v-6e2q0-24 18-42t42-18h249q12.75.0 21.38 8.68 8.62 8.67 8.62 21.5.0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H180v6e2h6e2v-249q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82.0 21.32 8.62 8.5 8.63 8.5 21.38v249q0 24-18 42t-42 18H180zm6e2-617L403-360q-9 9-21 8.5t-21-9.5-9-21 9-21l377-377H549q-12.75.0-21.37-8.68-8.63-8.67-8.63-21.5.0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h261q12.75.0 21.38 8.62Q840-822.75 840-810v261q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82.0-21.32-8.63-8.5-8.62-8.5-21.37v-188z"/></svg>
</span><span>Open Markdown</span>
</button>
<button onclick=openInDocsAI() data-heap-id=search-docs-ai-button class="flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 whitespace-nowrap">
<span class="icon-svg icon-sm"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M378-329q-108.16.0-183.08-75Q120-479 120-585t75-181 181.5-75 181 75T632-584.85Q632-542 618-502t-42 75l242 240q9 8.56 9 21.78T818-143t-22.22 9-21.78-9L533-384q-30 26-69.96 40.5Q423.08-329 378-329zm-1-60q81.25.0 138.13-57.5Q572-504 572-585t-56.87-138.5Q458.25-781 377-781q-82.08.0-139.54 57.5T180-585t57.46 138.5T377-389z"/></svg>
</span><span>Ask Docs AI</span>
</button>
<button onclick=openInClaude() data-heap-id=open-claude-button class="flex w-full items-center gap-2 px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 whitespace-nowrap">
<span class="icon-svg icon-sm"><svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97.0 01-.104-.729L6.283.134 6.696.0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"/></svg>
</span><span>Open in Claude</span></button></div></div><script>function getCurrentPlaintextUrl(){const e=window.location.href.split("#")[0].replace(/\/$/,"");return`${e}.md`}function copyMarkdown(){fetch(getCurrentPlaintextUrl()).then(e=>e.text()).then(e=>{navigator.clipboard.writeText(e).then(()=>{const e=document.querySelector('[data-heap-id="copy-markdown-button"]');if(!e)return;const t=e.querySelectorAll(".icon-svg"),n=t[0],s=t[1];n.classList.add("hidden"),s.classList.remove("hidden"),setTimeout(()=>{n.classList.remove("hidden"),s.classList.add("hidden")},2e3)})}).catch(e=>{console.error("Error copying markdown:",e)})}function viewPlainText(){window.open(getCurrentPlaintextUrl(),"_blank")}function openInDocsAI(){const e=document.querySelector(".open-kapa-widget");e?e.click():alert("Couldn't find Docs AI.")}function openInClaude(){const e=getCurrentPlaintextUrl(),t=`Read ${e} so I can ask questions about it.`,n=encodeURIComponent(t),s=`https://claude.ai/new?q=${n}`;window.open(s,"_blank")}</script></div></div><div class="block lg:hidden"><div data-pagefind-ignore class=not-prose><div class="pb-0 text-lg lg:pb-2">Table of contents</div><nav class=toc><ul class=pl-2><li><a class="link lg:no-underline" href=#prerequisites>Prerequisites</a></li><li><a class="link lg:no-underline" href=#step-1-set-up-the-project>Step 1: Set up the project</a></li><li><a class="link lg:no-underline" href=#step-2-define-and-start-your-services>Step 2: Define and start your services</a></li><li><a class="link lg:no-underline" href=#step-3-fix-the-startup-race-with-health-checks>Step 3: Fix the startup race with health checks</a></li><li><a class="link lg:no-underline" href=#step-4-enable-compose-watch-for-live-updates>Step 4: Enable Compose Watch for live updates</a></li><li><a class="link lg:no-underline" href=#step-5-persist-data-with-named-volumes>Step 5: Persist data with named volumes</a></li><li><a class="link lg:no-underline" href=#step-6-structure-your-project-with-multiple-compose-files>Step 6: Structure your project with multiple Compose files</a></li><li><a class="link lg:no-underline" href=#step-7-inspect-and-debug-your-running-stack>Step 7: Inspect and debug your running stack</a></li><ul class=pl-2><li><a class="link lg:no-underline" href=#stream-logs-from-all-services>Stream logs from all services</a></li><li><a class="link lg:no-underline" href=#run-commands-inside-a-running-container>Run commands inside a running container</a></li><ul class=pl-2></ul></ul><li><a class="link lg:no-underline" href=#where-to-go-next>Where to go next</a></li></ul></nav></div><hr></div><p>This tutorial aims to introduce fundamental concepts of Docker Compose by guiding you through the development of a basic Python web application.</p><p>Using the Flask framework, the application features a hit counter in Redis, providing a practical example of how Docker Compose can be applied in web development scenarios. The concepts demonstrated here should be understandable even if you're not familiar with Python.</p><h2 class="scroll-mt-20 flex items-center gap-2" id=prerequisites><a class="text-black dark:text-white no-underline hover:underline" href=#prerequisites>Prerequisites</a></h2><p>Make sure you have:</p><ul><li><a class=link href=https://docs.docker.com/compose/install/>Installed the latest version of Docker Compose</a></li><li>A basic understanding of Docker concepts and how Docker works</li></ul><h2 class="scroll-mt-20 flex items-center gap-2" id=step-1-set-up-the-project><a class="text-black dark:text-white no-underline hover:underline" href=#step-1-set-up-the-project>Step 1: Set up the project</a></h2><ol><li><p>Create a directory for the project:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBta2RpciBjb21wb3NlLWRlbW8KJCBjZCBjb21wb3NlLWRlbW8=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> mkdir compose-demo
</span></span><span class=line><span class=cl><span class=gp>$</span> <span class=nb>cd</span> compose-demo
</span></span></code></pre></div></div></div></div></li><li><p>Create <code>app.py</code> in your project directory and add the following:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'aW1wb3J0IG9zCmltcG9ydCByZWRpcwpmcm9tIGZsYXNrIGltcG9ydCBGbGFzawoKYXBwID0gRmxhc2soX19uYW1lX18pCmNhY2hlID0gcmVkaXMuUmVkaXMoCiAgICBob3N0PW9zLmdldGVudigiUkVESVNfSE9TVCIsICJyZWRpcyIpLAogICAgcG9ydD1pbnQob3MuZ2V0ZW52KCJSRURJU19QT1JUIiwgIjYzNzkiKSksCikKCkBhcHAucm91dGUoIi8iKQpkZWYgaGVsbG8oKToKICAgIGNvdW50ID0gY2FjaGUuaW5jcigiaGl0cyIpCiAgICByZXR1cm4gZiJIZWxsbyBmcm9tIERvY2tlciEgSSBoYXZlIGJlZW4gc2VlbiB7Y291bnR9IHRpbWUocykuXG4i', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-python data-lang=python><span class=line><span class=cl><span class=kn>import</span> <span class=nn>os</span>
</span></span><span class=line><span class=cl><span class=kn>import</span> <span class=nn>redis</span>
</span></span><span class=line><span class=cl><span class=kn>from</span> <span class=nn>flask</span> <span class=kn>import</span> <span class=n>Flask</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl><span class=n>app</span> <span class=o>=</span> <span class=n>Flask</span><span class=p>(</span><span class=vm>__name__</span><span class=p>)</span>
</span></span><span class=line><span class=cl><span class=n>cache</span> <span class=o>=</span> <span class=n>redis</span><span class=o>.</span><span class=n>Redis</span><span class=p>(</span>
</span></span><span class=line><span class=cl> <span class=n>host</span><span class=o>=</span><span class=n>os</span><span class=o>.</span><span class=n>getenv</span><span class=p>(</span><span class=s2>&#34;REDIS_HOST&#34;</span><span class=p>,</span> <span class=s2>&#34;redis&#34;</span><span class=p>),</span>
</span></span><span class=line><span class=cl> <span class=n>port</span><span class=o>=</span><span class=nb>int</span><span class=p>(</span><span class=n>os</span><span class=o>.</span><span class=n>getenv</span><span class=p>(</span><span class=s2>&#34;REDIS_PORT&#34;</span><span class=p>,</span> <span class=s2>&#34;6379&#34;</span><span class=p>)),</span>
</span></span><span class=line><span class=cl><span class=p>)</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl><span class=nd>@app.route</span><span class=p>(</span><span class=s2>&#34;/&#34;</span><span class=p>)</span>
</span></span><span class=line><span class=cl><span class=k>def</span> <span class=nf>hello</span><span class=p>():</span>
</span></span><span class=line><span class=cl> <span class=n>count</span> <span class=o>=</span> <span class=n>cache</span><span class=o>.</span><span class=n>incr</span><span class=p>(</span><span class=s2>&#34;hits&#34;</span><span class=p>)</span>
</span></span><span class=line><span class=cl> <span class=k>return</span> <span class=sa>f</span><span class=s2>&#34;Hello from Docker! I have been seen </span><span class=si>{</span><span class=n>count</span><span class=si>}</span><span class=s2> time(s).</span><span class=se>\n</span><span class=s2>&#34;</span></span></span></code></pre></div></div></div></div><p>The app reads its Redis connection details from environment variables, with sensible defaults so it works out of the box.</p></li><li><p>Create <code>requirements.txt</code> in your project directory and add the following:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'Zmxhc2sKcmVkaXM=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>flask
</span></span><span class=line><span class=cl>redis</span></span></code></pre></div></div></div></div></li><li><p>Create a <code>Dockerfile</code>:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGU6MQpGUk9NIHB5dGhvbjozLjEyLWFscGluZSAgIyBCdWlsZHMgYW4gaW1hZ2Ugd2l0aCB0aGUgUHl0aG9uIDMuMTIgaW1hZ2UKV09SS0RJUiAvY29kZSAgIyBTZXRzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byBgL2NvZGVgCkVOViBGTEFTS19BUFA9YXBwLnB5ICAjIFNldHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGBmbGFza2AgY29tbWFuZApFTlYgRkxBU0tfUlVOX0hPU1Q9MC4wLjAuMApSVU4gYXBrIGFkZCAtLW5vLWNhY2hlIGdjYyBtdXNsLWRldiBsaW51eC1oZWFkZXJzICAjIEluc3RhbGxzIGBnY2NgIGFuZCBvdGhlciBkZXBlbmRlbmNpZXMKQ09QWSByZXF1aXJlbWVudHMudHh0IC4gICMgQ29waWVzIGByZXF1aXJlbWVudHMudHh0YApSVU4gcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAgIyBJbnN0YWxscyB0aGUgUHl0aG9uIGRlcGVuZGVuY2llcwpDT1BZIC4gLiAgIyBDb3BpZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGAuYCBpbiB0aGUgcHJvamVjdCB0byB0aGUgd29ya2RpciBgLmAgaW4gdGhlIGltYWdlCkVYUE9TRSA1MDAwCkNNRCBbImZsYXNrIiwgInJ1biIsICItLWRlYnVnIl0gICMgU2V0cyB0aGUgZGVmYXVsdCBjb21tYW5kIGZvciB0aGUgY29udGFpbmVyIHRvIGBmbGFzayBydW4gLS1kZWJ1Z2A=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-dockerfile data-lang=dockerfile><span class=line><span class=cl><span class=c># syntax=docker/dockerfile:1</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>FROM</span><span class=w> </span><span class=s>python:3.12-alpine</span> <span class=c1># Builds an image with the Python 3.12 image</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>WORKDIR</span><span class=w> </span><span class=s>/code</span> <span class=c1># Sets the working directory to `/code`</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>ENV</span> <span class=nv>FLASK_APP</span><span class=o>=</span>app.py <span class=c1># Sets environment variables used by the `flask` command</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>ENV</span> <span class=nv>FLASK_RUN_HOST</span><span class=o>=</span><span class=m>0</span>.0.0.0<span class=err>
</span></span></span><span class=line><span class=cl><span class=k>RUN</span> apk add --no-cache gcc musl-dev linux-headers <span class=c1># Installs `gcc` and other dependencies</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>COPY</span> requirements.txt . <span class=c1># Copies `requirements.txt`</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>RUN</span> pip install -r requirements.txt <span class=c1># Installs the Python dependencies</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>COPY</span> . . <span class=c1># Copies the current directory `.` in the project to the workdir `.` in the image</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>EXPOSE</span><span class=w> </span><span class=s>5000</span><span class=err>
</span></span></span><span class=line><span class=cl><span class=k>CMD</span> <span class=p>[</span><span class=s2>&#34;flask&#34;</span><span class=p>,</span> <span class=s2>&#34;run&#34;</span><span class=p>,</span> <span class=s2>&#34;--debug&#34;</span><span class=p>]</span> <span class=c1># Sets the default command for the container to `flask run --debug`</span></span></span></code></pre></div></div></div></div><blockquote class="admonition admonition-note admonition not-prose"><div class=admonition-header><span class=admonition-icon><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M12 8v4m0 4H12.01M7.8 21h8.4C17.8802 21 18.7202 21 19.362 20.673 19.9265 20.3854 20.3854 19.9265 20.673 19.362 21 18.7202 21 17.8802 21 16.2V7.8C21 6.11984 21 5.27976 20.673 4.63803 20.3854 4.07354 19.9265 3.6146 19.362 3.32698 18.7202 3 17.8802 3 16.2 3H7.8c-1.68016.0-2.52024.0-3.16197.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803 3 5.27976 3 6.11984 3 7.8v8.4c0 1.6802.0 2.5202.32698 3.162C3.6146 19.9265 4.07354 20.3854 4.63803 20.673 5.27976 21 6.11984 21 7.8 21z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span><span class=admonition-title>Important</span></div><div class=admonition-content><p>Make sure the file is named <code>Dockerfile</code> with no extension. Some editors add <code>.txt</code>
automatically, which causes the build to fail.</p></div></blockquote><p>For more information on how to write Dockerfiles, see the
<a class=link href=/reference/dockerfile/>Dockerfile reference</a>.</p></li><li><p>Create a <code>.env</code> file to hold configuration values:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'QVBQX1BPUlQ9ODAwMApSRURJU19IT1NUPXJlZGlzClJFRElTX1BPUlQ9NjM3OQ==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>APP_PORT=8000
</span></span><span class=line><span class=cl>REDIS_HOST=redis
</span></span><span class=line><span class=cl>REDIS_PORT=6379</span></span></code></pre></div></div></div></div><p>Compose automatically reads <code>.env</code> and makes these values available for interpolation
in your <code>compose.yaml</code>. For this example the gains are modest, but in practice,
keeping configuration out of the Compose file makes it easier to:</p><ul><li>Change values across environments without editing YAML</li><li>Avoid committing secrets to version control</li><li>Reuse values across multiple services</li></ul></li><li><p>Create a <code>.dockerignore</code> file to keep unnecessary files out of your build context:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'LmVudgoqLnB5YwpfX3B5Y2FjaGVfXwpyZWRpcy1kYXRh', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>.env
</span></span><span class=line><span class=cl>*.pyc
</span></span><span class=line><span class=cl>__pycache__
</span></span><span class=line><span class=cl>redis-data</span></span></code></pre></div></div></div></div><p>Docker sends everything in your project directory to the daemon when it builds an image.
Without <code>.dockerignore</code>, that includes your <code>.env</code> file (which may contain secrets) and
any cached Python bytecode. Excluding them keeps builds fast and avoids accidentally
baking sensitive values into an image layer.</p></li></ol><h2 class="scroll-mt-20 flex items-center gap-2" id=step-2-define-and-start-your-services><a class="text-black dark:text-white no-underline hover:underline" href=#step-2-define-and-start-your-services>Step 2: Define and start your services</a></h2><p>Compose simplifies the control of your entire application stack, making it easy to manage services, networks, and volumes in a single YAML configuration file.</p><ol><li><p>Create <code>compose.yaml</code> in your project directory and paste the following:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'c2VydmljZXM6CiAgd2ViOgogICAgYnVpbGQ6IC4KICAgIHBvcnRzOgogICAgICAtICIke0FQUF9QT1JUfTo1MDAwIgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUkVESVNfSE9TVD0ke1JFRElTX0hPU1R9CiAgICAgIC0gUkVESVNfUE9SVD0ke1JFRElTX1BPUlR9CgogIHJlZGlzOgogICAgaW1hZ2U6IHJlZGlzOmFscGluZQ==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>web</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>build</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>&#34;${APP_PORT}:5000&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_HOST=${REDIS_HOST}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_PORT=${REDIS_PORT}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redis:alpine</span></span></span></code></pre></div></div></div></div><p>This Compose file defines two services:</p><ul><li><p>The <code>web</code> service uses an image that's built from the <code>Dockerfile</code> in the current directory. It maps port <code>8000</code> on the host to port <code>5000</code> on the container where Flask listens by default.</p></li><li><p>The <code>redis</code> service uses a public <a class=link href=https://registry.hub.docker.com/_/redis/ rel=noopener>Redis</a> image pulled from the Docker Hub registry.</p></li></ul><p>For more information on the <code>compose.yaml</code> file, see <a class=link href=https://docs.docker.com/compose/intro/compose-application-model/>How Compose works</a>.</p></li><li><p>Start up your application:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSB1cA==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose up
</span></span></code></pre></div></div></div></div><p>With a single command, you create and start all the services from your configuration file. Compose builds your web image, pulls the Redis image, and starts both containers.</p></li><li><p>Open <code>http://localhost:8000</code>. You should see:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'SGVsbG8gZnJvbSBEb2NrZXIhIEkgaGF2ZSBiZWVuIHNlZW4gMSB0aW1lKHMpLg==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>Hello from Docker! I have been seen 1 time(s).</span></span></code></pre></div></div></div></div><p>Refresh the page — the counter increments on each visit.</p><p>This minimal setup works, but it has two problems you'll fix in the next steps:</p><ul><li>Startup race: <code>web</code> starts at the same time as <code>redis</code>. If Redis isn't ready yet,
the Flask app fails to connect and crashes.</li><li>No persistence: If you run <code>docker compose down</code> followed by <code>docker compose up</code>, the
counter resets to zero. <code>docker compose down</code> removes the containers, and with them
any data written to the container's writable layer. <code>docker compose stop</code> preserves
the containers so data survives, but you can't rely on that in production where
containers are regularly replaced.</li></ul></li><li><p>Stop the stack before moving on:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBkb3du', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose down
</span></span></code></pre></div></div></div></div></li></ol><h2 class="scroll-mt-20 flex items-center gap-2" id=step-3-fix-the-startup-race-with-health-checks><a class="text-black dark:text-white no-underline hover:underline" href=#step-3-fix-the-startup-race-with-health-checks>Step 3: Fix the startup race with health checks</a></h2><p>To fix the startup race, Compose needs to wait until <code>redis</code> is confirmed healthy before
starting <code>web</code>.</p><ol><li><p>Update <code>compose.yaml</code>:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'c2VydmljZXM6CiAgd2ViOgogICAgYnVpbGQ6IC4KICAgIHBvcnRzOgogICAgICAtICIke0FQUF9QT1JUfTo1MDAwIgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUkVESVNfSE9TVD0ke1JFRElTX0hPU1R9CiAgICAgIC0gUkVESVNfUE9SVD0ke1JFRElTX1BPUlR9CiAgICBkZXBlbmRzX29uOgogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQoKICByZWRpczoKICAgIGltYWdlOiByZWRpczphbHBpbmUKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OiBbIkNNRCIsICJyZWRpcy1jbGkiLCAicGluZyJdCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAzcwogICAgICByZXRyaWVzOiA1CiAgICAgIHN0YXJ0X3BlcmlvZDogMTBz', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>web</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>build</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>&#34;${APP_PORT}:5000&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_HOST=${REDIS_HOST}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_PORT=${REDIS_PORT}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>depends_on</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>condition</span><span class=p>:</span><span class=w> </span><span class=l>service_healthy</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redis:alpine</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>healthcheck</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>test</span><span class=p>:</span><span class=w> </span><span class=p>[</span><span class=s2>&#34;CMD&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;redis-cli&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;ping&#34;</span><span class=p>]</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>interval</span><span class=p>:</span><span class=w> </span><span class=l>5s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>timeout</span><span class=p>:</span><span class=w> </span><span class=l>3s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>retries</span><span class=p>:</span><span class=w> </span><span class=m>5</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>start_period</span><span class=p>:</span><span class=w> </span><span class=l>10s</span></span></span></code></pre></div></div></div></div><p>The <code>healthcheck</code> block tells Compose how to test whether Redis is ready:</p><ul><li><code>test</code> is the command Compose runs inside the container to check its health.
<code>redis-cli ping</code> connects to Redis and expects a <code>PONG</code> response — if it gets one,
the container is healthy.</li><li><code>start_period</code> gives Redis 10 seconds to initialize before health checks begin.
Any failures during this window don't count toward the retry limit.</li><li><code>interval</code> runs the check every 5 seconds after the start period has elapsed.</li><li><code>timeout</code> gives each check 3 seconds to respond before treating it as a failure.</li><li><code>retries</code> sets how many consecutive failures are allowed before Compose marks the
container as unhealthy. With <code>interval: 5s</code> and <code>retries: 5</code>, Compose will wait up
to 25 seconds before giving up.</li></ul></li><li><p>Start the stack to confirm the ordering is fixed:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSB1cA==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose up
</span></span></code></pre></div></div></div></div><p>You should see something similar to:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'WytdIFJ1bm5pbmcgMi8yCuKclCBDb250YWluZXIgY29tcG9zZS1kZW1vLXJlZGlzLTEgIEhlYWx0aHkgICAgICAgICAgICAgICAgICAgICAgIDAuMHM=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>[+] Running 2/2
</span></span><span class=line><span class=cl>✔ Container compose-demo-redis-1 Healthy 0.0s</span></span></code></pre></div></div></div></div></li><li><p>Open <code>http://localhost:8000</code> to confirm the app is still working, then stop the stack before moving on:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBkb3du', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose down
</span></span></code></pre></div></div></div></div></li></ol><h2 class="scroll-mt-20 flex items-center gap-2" id=step-4-enable-compose-watch-for-live-updates><a class="text-black dark:text-white no-underline hover:underline" href=#step-4-enable-compose-watch-for-live-updates>Step 4: Enable Compose Watch for live updates</a></h2><p>Without Compose Watch, every code change requires you to stop the stack, rebuild the image, and restart the containers. Compose Watch eliminates that cycle by automatically syncing changes into your running container as you save files.</p><ol><li><p>Update <code>compose.yaml</code> to add the <code>develop.watch</code> block to the <code>web</code> service:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'c2VydmljZXM6CiAgd2ViOgogICAgYnVpbGQ6IC4KICAgIHBvcnRzOgogICAgICAtICIke0FQUF9QT1JUfTo1MDAwIgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUkVESVNfSE9TVD0ke1JFRElTX0hPU1R9CiAgICAgIC0gUkVESVNfUE9SVD0ke1JFRElTX1BPUlR9CiAgICBkZXBlbmRzX29uOgogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgZGV2ZWxvcDoKICAgICAgd2F0Y2g6CiAgICAgICAgLSBhY3Rpb246IHN5bmMrcmVzdGFydAogICAgICAgICAgcGF0aDogLgogICAgICAgICAgdGFyZ2V0OiAvY29kZQogICAgICAgIC0gYWN0aW9uOiByZWJ1aWxkCiAgICAgICAgICBwYXRoOiByZXF1aXJlbWVudHMudHh0CgogIHJlZGlzOgogICAgaW1hZ2U6IHJlZGlzOmFscGluZQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6IFsiQ01EIiwgInJlZGlzLWNsaSIsICJwaW5nIl0KICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDNzCiAgICAgIHJldHJpZXM6IDUKICAgICAgc3RhcnRfcGVyaW9kOiAxMHM=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>web</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>build</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>&#34;${APP_PORT}:5000&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_HOST=${REDIS_HOST}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_PORT=${REDIS_PORT}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>depends_on</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>condition</span><span class=p>:</span><span class=w> </span><span class=l>service_healthy</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>develop</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>watch</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>action</span><span class=p>:</span><span class=w> </span><span class=l>sync+restart</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>target</span><span class=p>:</span><span class=w> </span><span class=l>/code</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>action</span><span class=p>:</span><span class=w> </span><span class=l>rebuild</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>requirements.txt</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redis:alpine</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>healthcheck</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>test</span><span class=p>:</span><span class=w> </span><span class=p>[</span><span class=s2>&#34;CMD&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;redis-cli&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;ping&#34;</span><span class=p>]</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>interval</span><span class=p>:</span><span class=w> </span><span class=l>5s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>timeout</span><span class=p>:</span><span class=w> </span><span class=l>3s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>retries</span><span class=p>:</span><span class=w> </span><span class=m>5</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>start_period</span><span class=p>:</span><span class=w> </span><span class=l>10s</span></span></span></code></pre></div></div></div></div><p>The <code>watch</code> block defines two rules:</p><ul><li>The <code>sync+restart</code> action watches your project directory (<code>.</code>) on the host. When a file changes, Compose copies any changed files into <code>/code</code> inside the running container, then restarts the container. Because the container restarts with the updated files already in place, Flask starts up reading the new code directly — no manual rebuild or restart needed.</li><li>The <code>rebuild</code> action on <code>requirements.txt</code> triggers a full image rebuild whenever you add a new dependency, since installing packages requires rebuilding the image, not just syncing files.</li></ul></li><li><p>Start the stack with Watch enabled:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSB1cCAtLXdhdGNo', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose up --watch
</span></span></code></pre></div></div></div></div></li><li><p>Make a live change. Open <code>app.py</code> and update the greeting:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'cmV0dXJuIGYiSGVsbG8gZnJvbSBDb21wb3NlIFdhdGNoISBJIGhhdmUgYmVlbiBzZWVuIHtjb3VudH0gdGltZShzKS5cbiI=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-python data-lang=python><span class=line><span class=cl><span class=k>return</span> <span class=sa>f</span><span class=s2>&#34;Hello from Compose Watch! I have been seen </span><span class=si>{</span><span class=n>count</span><span class=si>}</span><span class=s2> time(s).</span><span class=se>\n</span><span class=s2>&#34;</span></span></span></code></pre></div></div></div></div></li><li><p>Save the file. Compose Watch detects the change and syncs it immediately:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'U3luY2luZyBzZXJ2aWNlICJ3ZWIiIGFmdGVyIGNoYW5nZXMgd2VyZSBkZXRlY3RlZA==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>Syncing service &#34;web&#34; after changes were detected</span></span></code></pre></div></div></div></div></li><li><p>Refresh <code>http://localhost:8000</code>. The updated greeting appears without any restart
and the counter should still be incrementing.</p></li><li><p>Stop the stack before moving on:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBkb3du', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose down
</span></span></code></pre></div></div></div></div><p>For more information on how Compose Watch works, see
<a class=link href=https://docs.docker.com/compose/how-tos/file-watch/>Use Compose Watch</a>.</p></li></ol><h2 class="scroll-mt-20 flex items-center gap-2" id=step-5-persist-data-with-named-volumes><a class="text-black dark:text-white no-underline hover:underline" href=#step-5-persist-data-with-named-volumes>Step 5: Persist data with named volumes</a></h2><p>Each time you stop and restart the stack the visit counter resets to zero. Redis data
lives inside the container, so it disappears when the container is removed. A named
volume fixes this by storing the data on the host, outside the container lifecycle.</p><ol><li><p>Update <code>compose.yaml</code>:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'c2VydmljZXM6CiAgd2ViOgogICAgYnVpbGQ6IC4KICAgIHBvcnRzOgogICAgICAtICIke0FQUF9QT1JUfTo1MDAwIgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUkVESVNfSE9TVD0ke1JFRElTX0hPU1R9CiAgICAgIC0gUkVESVNfUE9SVD0ke1JFRElTX1BPUlR9CiAgICBkZXBlbmRzX29uOgogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgZGV2ZWxvcDoKICAgICAgd2F0Y2g6CiAgICAgICAgLSBhY3Rpb246IHN5bmMrcmVzdGFydAogICAgICAgICAgcGF0aDogLgogICAgICAgICAgdGFyZ2V0OiAvY29kZQogICAgICAgIC0gYWN0aW9uOiByZWJ1aWxkCiAgICAgICAgICBwYXRoOiByZXF1aXJlbWVudHMudHh0CgogIHJlZGlzOgogICAgaW1hZ2U6IHJlZGlzOmFscGluZQogICAgdm9sdW1lczoKICAgICAgLSByZWRpcy1kYXRhOi9kYXRhCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDogWyJDTUQiLCAicmVkaXMtY2xpIiwgInBpbmciXQogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogM3MKICAgICAgcmV0cmllczogNQogICAgICBzdGFydF9wZXJpb2Q6IDEwcwoKdm9sdW1lczoKICByZWRpcy1kYXRhOg==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>web</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>build</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>&#34;${APP_PORT}:5000&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_HOST=${REDIS_HOST}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_PORT=${REDIS_PORT}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>depends_on</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>condition</span><span class=p>:</span><span class=w> </span><span class=l>service_healthy</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>develop</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>watch</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>action</span><span class=p>:</span><span class=w> </span><span class=l>sync+restart</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>target</span><span class=p>:</span><span class=w> </span><span class=l>/code</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>action</span><span class=p>:</span><span class=w> </span><span class=l>rebuild</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>requirements.txt</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redis:alpine</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redis-data:/data</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>healthcheck</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>test</span><span class=p>:</span><span class=w> </span><span class=p>[</span><span class=s2>&#34;CMD&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;redis-cli&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;ping&#34;</span><span class=p>]</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>interval</span><span class=p>:</span><span class=w> </span><span class=l>5s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>timeout</span><span class=p>:</span><span class=w> </span><span class=l>3s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>retries</span><span class=p>:</span><span class=w> </span><span class=m>5</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>start_period</span><span class=p>:</span><span class=w> </span><span class=l>10s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=l>redis-data:</span></span></span></code></pre></div></div></div></div><p>The <code>redis-data:/data</code> entry under <code>redis.volumes</code> mounts the named volume at <code>/data</code>, the path where Redis
writes its data files. The top-level <code>volumes</code> key registers it with Docker so it
persists between <code>compose down</code> and <code>compose up</code> cycles.</p></li><li><p>Start the stack with <code>docker compose up --watch</code> and refresh <code>http://localhost:8000</code> a few times to build up a count.</p></li><li><p>Tear down the stack with <code>docker compose down</code> and then bring it back up again with <code>docker compose up --watch</code>.</p></li><li><p>Open <code>http://localhost:8000</code> — the counter continues from where it left off.</p></li><li><p>Now reset the counter with <code>docker compose down -v</code>.</p><p>The <code>-v</code> flag removes named volumes along with the containers. Use this intentionally — it permanently deletes the stored data.</p></li></ol><h2 class="scroll-mt-20 flex items-center gap-2" id=step-6-structure-your-project-with-multiple-compose-files><a class="text-black dark:text-white no-underline hover:underline" href=#step-6-structure-your-project-with-multiple-compose-files>Step 6: Structure your project with multiple Compose files</a></h2><p>As applications grow, a single <code>compose.yaml</code> becomes harder to maintain. The <code>include</code>
top-level element lets you split services across multiple files while keeping them part of the
same application.</p><p>This is especially useful when different teams own different parts of the stack, or when
you want to reuse infrastructure definitions across projects.</p><ol><li><p>Create a new file in your project directory called <code>infra.yaml</code> and move the Redis service and volume into it:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'IHNlcnZpY2VzOgogIHJlZGlzOgogICAgaW1hZ2U6IHJlZGlzOmFscGluZQogICAgdm9sdW1lczoKICAgICAgLSByZWRpcy1kYXRhOi9kYXRhCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDogWyJDTUQiLCAicmVkaXMtY2xpIiwgInBpbmciXQogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogM3MKICAgICAgcmV0cmllczogNQogICAgICBzdGFydF9wZXJpb2Q6IDEwcwoKdm9sdW1lczoKICByZWRpcy1kYXRhOg==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=w> </span><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redis:alpine</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redis-data:/data</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>healthcheck</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>test</span><span class=p>:</span><span class=w> </span><span class=p>[</span><span class=s2>&#34;CMD&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;redis-cli&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;ping&#34;</span><span class=p>]</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>interval</span><span class=p>:</span><span class=w> </span><span class=l>5s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>timeout</span><span class=p>:</span><span class=w> </span><span class=l>3s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>retries</span><span class=p>:</span><span class=w> </span><span class=m>5</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>start_period</span><span class=p>:</span><span class=w> </span><span class=l>10s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=l>redis-data:</span></span></span></code></pre></div></div></div></div></li><li><p>Update <code>compose.yaml</code> to include <code>infra.yaml</code>:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'aW5jbHVkZToKICAgLSBwYXRoOiAuL2luZnJhLnlhbWwKc2VydmljZXM6CiAgd2ViOgogICAgYnVpbGQ6IC4KICAgIHBvcnRzOgogICAgICAtICIke0FQUF9QT1JUfTo1MDAwIgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUkVESVNfSE9TVD0ke1JFRElTX0hPU1R9CiAgICAgIC0gUkVESVNfUE9SVD0ke1JFRElTX1BPUlR9CiAgICBkZXBlbmRzX29uOgogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgZGV2ZWxvcDoKICAgICAgd2F0Y2g6CiAgICAgICAgLSBhY3Rpb246IHN5bmMrcmVzdGFydAogICAgICAgICAgcGF0aDogLgogICAgICAgICAgdGFyZ2V0OiAvY29kZQogICAgICAgIC0gYWN0aW9uOiByZWJ1aWxkCiAgICAgICAgICBwYXRoOiByZXF1aXJlbWVudHMudHh0', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>include</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>./infra.yaml</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>web</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>build</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>&#34;${APP_PORT}:5000&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_HOST=${REDIS_HOST}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>REDIS_PORT=${REDIS_PORT}</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>depends_on</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redis</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>condition</span><span class=p>:</span><span class=w> </span><span class=l>service_healthy</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>develop</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>watch</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>action</span><span class=p>:</span><span class=w> </span><span class=l>sync+restart</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>.</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>target</span><span class=p>:</span><span class=w> </span><span class=l>/code</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>action</span><span class=p>:</span><span class=w> </span><span class=l>rebuild</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>path</span><span class=p>:</span><span class=w> </span><span class=l>requirements.txt</span></span></span></code></pre></div></div></div></div></li><li><p>Run the application to confirm everything still works:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSB1cCAtLXdhdGNo', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose up --watch
</span></span></code></pre></div></div></div></div><p>Compose merges both files at startup. The <code>web</code> service can still reference <code>redis</code>
by name because all included services share the same default network.</p><p>This is a simplified example, but it demonstrates the basic principle of <code>include</code> and how it can make it easier to modularize complex applications into sub-Compose files. For more information on <code>include</code> and working with multiple Compose files, see
<a class=link href=https://docs.docker.com/compose/how-tos/multiple-compose-files/>Working with multiple Compose files</a>.</p></li><li><p>Stop the stack before moving on:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBkb3du', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose down
</span></span></code></pre></div></div></div></div></li></ol><h2 class="scroll-mt-20 flex items-center gap-2" id=step-7-inspect-and-debug-your-running-stack><a class="text-black dark:text-white no-underline hover:underline" href=#step-7-inspect-and-debug-your-running-stack>Step 7: Inspect and debug your running stack</a></h2><p>With a fully configured stack, you can observe what's happening inside your containers
without stopping anything. This step covers the core commands for inspecting the resolved configuration, streaming logs, and running commands
inside a running container.</p><p>Before starting the stack, verify that Compose has resolved your <code>.env</code> variables and
merged all files correctly:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBjb25maWc=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose config
</span></span></code></pre></div></div></div></div><p><code>docker compose config</code> doesn't require the stack to be running — it works purely from
your files. A few things worth noting in the output:</p><ul><li><code>${APP_PORT}</code>, <code>${REDIS_HOST}</code>, and <code>${REDIS_PORT}</code> have all been replaced with the
values from your <code>.env</code> file.</li><li>Short-form port notation (<code>"8000:5000"</code>) is expanded into its canonical fields
(<code>target</code>, <code>published</code>, <code>protocol</code>).</li><li>The default network and volume names are made explicit, prefixed with the project name
<code>compose-demo</code>.</li><li>The output is the fully resolved configuration, with any files
brought in via <code>include</code> merged into a single view.</li></ul><p>Use <code>docker compose config</code> any time you want to confirm what Compose will actually
apply, especially when debugging variable substitution or working with multiple Compose files.</p><p>Now start the stack in detached mode so the terminal stays free for the commands that
follow:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSB1cCAtZA==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose up -d
</span></span></code></pre></div></div></div></div><h3 class="scroll-mt-20 flex items-center gap-2" id=stream-logs-from-all-services><a class="text-black dark:text-white no-underline hover:underline" href=#stream-logs-from-all-services>Stream logs from all services</a></h3><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBsb2dzIC1m', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose logs -f
</span></span></code></pre></div></div></div></div><p>The <code>-f</code> flag follows the log stream in real time, interleaving output from both
containers with color-coded service name prefixes. Refresh <code>http://localhost:8000</code> a
few times and watch the Flask request logs appear. To follow logs for a single service,
pass its name:</p><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBsb2dzIC1mIHdlYg==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose logs -f web
</span></span></code></pre></div></div></div></div><p>Press <code>Ctrl+C</code> to stop following logs. The containers keep running.</p><h3 class="scroll-mt-20 flex items-center gap-2" id=run-commands-inside-a-running-container><a class="text-black dark:text-white no-underline hover:underline" href=#run-commands-inside-a-running-container>Run commands inside a running container</a></h3><p><code>docker compose exec</code> runs a command inside an already-running container without
starting a new one. This is the primary tool for live debugging.</p><h4 class="scroll-mt-20 flex items-center gap-2" id=verify-environment-variables-are-set-correctly><a class="text-black dark:text-white no-underline hover:underline" href=#verify-environment-variables-are-set-correctly>Verify environment variables are set correctly</a></h4><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBleGVjIHdlYiBlbnYgfCBncmVwIFJFRElT', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose <span class=nb>exec</span> web env <span class=p>|</span> grep REDIS
</span></span></code></pre></div></div></div></div><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'UkVESVNfSE9TVD1yZWRpcwpSRURJU19QT1JUPTYzNzk=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>REDIS_HOST=redis
</span></span><span class=line><span class=cl>REDIS_PORT=6379</span></span></code></pre></div></div></div></div><h4 class="scroll-mt-20 flex items-center gap-2" id=test-that-the-web-container-can-reach-redis-using-the-service-name-as-the-hostname><a class="text-black dark:text-white no-underline hover:underline" href=#test-that-the-web-container-can-reach-redis-using-the-service-name-as-the-hostname>Test that the <code>web</code> container can reach Redis using the service name as the hostname</a></h4><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBleGVjIHdlYiBweXRob24gLWMgImltcG9ydCByZWRpczsgciA9IHJlZGlzLlJlZGlzKGhvc3Q9J3JlZGlzJyk7IHByaW50KHIucGluZygpKSI=', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose <span class=nb>exec</span> web python -c <span class=s2>&#34;import redis; r = redis.Redis(host=&#39;redis&#39;); print(r.ping())&#34;</span>
</span></span></code></pre></div></div></div></div><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'VHJ1ZQ==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-text data-lang=text><span class=line><span class=cl>True</span></span></code></pre></div></div></div></div><p>This uses the same <code>redis</code> library your app uses, so a <code>True</code> response confirms that
service discovery, networking, and the Redis connection are all working end to end.</p><h4 class="scroll-mt-20 flex items-center gap-2" id=inspect-the-live-value-of-the-hit-counter-in-redis><a class="text-black dark:text-white no-underline hover:underline" href=#inspect-the-live-value-of-the-hit-counter-in-redis>Inspect the live value of the hit counter in Redis</a></h4><div data-pagefind-ignore x-data x-ref=root class="group mt-2 mb-4 flex w-full scroll-mt-2 flex-col items-start gap-4 rounded bg-gray-50 p-2 outline outline-1 outline-offset-[-1px] outline-gray-200 dark:bg-gray-900 dark:outline-gray-800"><div class="relative w-full"><div class="syntax-light dark:syntax-dark not-prose w-full"><button x-data="{ code: 'JCBkb2NrZXIgY29tcG9zZSBleGVjIHJlZGlzIHJlZGlzLWNsaSBHRVQgaGl0cw==', copying: false }" class="top-1
absolute right-2 z-10 text-gray-300 dark:text-gray-500" title=copy @click="window.navigator.clipboard.writeText(atob(code).replaceAll(/^[\$>]\s+/gm, ''));
copying = true;
setTimeout(() => copying = false, 2000);">
<span :class="{ 'group-hover:block' : !copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="M3e2-2e2q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H3e2zM180-80q-24 0-42-18t-18-42v-590q0-13 8.5-21.5T150-760t21.5 8.5T180-730v590h470q13 0 21.5 8.5T680-110t-8.5 21.5T650-80H180z"/></svg></span>
<span :class="{ 'group-hover:block' : copying }" class="icon-svg hidden"><svg width="48" height="48" viewBox="0 -960 960 960"><path d="m421-389-98-98q-9-9-22-9t-23 10q-9 9-9 22t9 22l122 123q9 9 21 9t21-9l239-239q10-10 10-23t-10-23q-10-9-23.5-8.5T635-603L421-389zm59 309q-82 0-155-31.5t-127.5-86-86-127.5T80-480q0-83 31.5-156t86-127T325-848.5 480-880q83 0 156 31.5T763-763t85.5 127T880-480q0 82-31.5 155T763-197.5t-127 86T480-80z"/></svg></span></button><div class=highlight><pre tabindex=0 class=chroma><code class=language-console data-lang=console><span class=line><span class=cl><span class=gp>$</span> docker compose <span class=nb>exec</span> redis redis-cli GET hits
</span></span></code></pre></div></div></div></div><h2 class="scroll-mt-20 flex items-center gap-2" id=where-to-go-next><a class="text-black dark:text-white no-underline hover:underline" href=#where-to-go-next>Where to go next</a></h2><ul><li><a class=link href=/reference/cli/docker/compose/>Explore the full list of Compose commands</a></li><li><a class=link href=https://docs.docker.com/reference/compose-file/>Explore the Compose file reference</a></li><li><a class=link href=https://www.linkedin.com/learning/learning-docker-compose/ rel=noopener>Check out the Learning Docker Compose video on LinkedIn Learning</a></li><li><a class=link href=/compose/how-tos/environment-variables/set-environment-variables/>Learn how to set environment variables in Compose</a></li><li><a class=link href=/compose/how-tos/oci-artifact/>Learn how to package and distribute your Compose app</a></li></ul></article></div><div class="-mt-8 hidden min-w-48 flex-1 lg:block"><aside class="sticky top-16 h-[calc(100vh-64px)] min-w-52 space-y-4 overflow-y-auto py-4 w-full"><p class="flex items-center gap-1"><span class="icon-svg-stroke icon-sm"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_5432_2123" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="1" y="1" width="22" height="22"><path d="M18 10.0001 14 6.00006M2.5 21.5001 5.88437 21.124C6.29786 21.0781 6.5046 21.0551 6.69785 20.9925 6.86929 20.937 7.03245 20.8586 7.18289 20.7594 7.35245 20.6476 7.49955 20.5005 7.79373 20.2063L21 7.00006c1.1046-1.10457 1.1046-2.89543.0-4-1.1045-1.10457-2.8954-1.10457-4 0L3.79373 16.2063C3.49955 16.5005 3.35246 16.6476 3.24064 16.8172 3.14143 16.9676 3.06301 17.1308 3.00751 17.3022 2.94496 17.4955 2.92198 17.7022 2.87604 18.1157L2.5 21.5001z" stroke="#6C7E9D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></mask><g mask="url(#mask0_5432_2123)"><rect width="24" height="24" fill="currentColor" fill-opacity=".9"/></g></svg>
</span><a class=link rel=noopener href=https://github.com/docker/docs/edit/main/content/manuals/compose/gettingstarted.md>Edit this page</a></p><p class="flex items-center gap-1"><span class="icon-svg-stroke icon-sm"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_5432_1323" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="1" y="2" width="21" height="21"><path d="M12 10.5V7m0 7H12.01M7 18v2.3355C7 20.8684 7 21.1348 7.10923 21.2716 7.20422 21.3906 7.34827 21.4599 7.50054 21.4597 7.67563 21.4595 7.88367 21.2931 8.29976 20.9602l2.38544-1.9084C11.1725 18.662 11.4162 18.4671 11.6875 18.3285 11.9282 18.2055 12.1844 18.1156 12.4492 18.0613 12.7477 18 13.0597 18 13.6837 18H16.2C17.8802 18 18.7202 18 19.362 17.673 19.9265 17.3854 20.3854 16.9265 20.673 16.362 21 15.7202 21 14.8802 21 13.2V7.8C21 6.11984 21 5.27976 20.673 4.63803 20.3854 4.07354 19.9265 3.6146 19.362 3.32698 18.7202 3 17.8802 3 16.2 3H7.8c-1.68016.0-2.52024.0-3.16197.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803 3 5.27976 3 6.11984 3 7.8V14c0 .93.0 1.395.10222 1.7765.2774 1.0352 1.08605 1.8439 2.12132 2.1213C5.60504 18 6.07003 18 7 18z" stroke="#6C7E9D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></mask><g mask="url(#mask0_5432_1323)"><rect width="24" height="24" fill="currentColor" fill-opacity=".9"/></g></svg>
</span><a class=link rel=noopener href="https://github.com/docker/docs/issues/new?template=doc_issue.yml&location=https%3a%2f%2fdocs.docker.com%2fcompose%2fgettingstarted%2f&labels=status%2Ftriage">Request changes</a></p><div id=TableOfContents class=overflow-x-auto><div data-pagefind-ignore class=not-prose><div class="pb-0 text-lg lg:pb-2">Table of contents</div><nav class=toc><ul class=pl-2><li><a class="link lg:no-underline" href=#prerequisites>Prerequisites</a></li><li><a class="link lg:no-underline" href=#step-1-set-up-the-project>Step 1: Set up the project</a></li><li><a class="link lg:no-underline" href=#step-2-define-and-start-your-services>Step 2: Define and start your services</a></li><li><a class="link lg:no-underline" href=#step-3-fix-the-startup-race-with-health-checks>Step 3: Fix the startup race with health checks</a></li><li><a class="link lg:no-underline" href=#step-4-enable-compose-watch-for-live-updates>Step 4: Enable Compose Watch for live updates</a></li><li><a class="link lg:no-underline" href=#step-5-persist-data-with-named-volumes>Step 5: Persist data with named volumes</a></li><li><a class="link lg:no-underline" href=#step-6-structure-your-project-with-multiple-compose-files>Step 6: Structure your project with multiple Compose files</a></li><li><a class="link lg:no-underline" href=#step-7-inspect-and-debug-your-running-stack>Step 7: Inspect and debug your running stack</a></li><ul class=pl-2><li><a class="link lg:no-underline" href=#stream-logs-from-all-services>Stream logs from all services</a></li><li><a class="link lg:no-underline" href=#run-commands-inside-a-running-container>Run commands inside a running container</a></li><ul class=pl-2></ul></ul><li><a class="link lg:no-underline" href=#where-to-go-next>Where to go next</a></li></ul></nav></div></div></aside></div></div></div></main><footer class="relative z-10 w-full"><div class="ml-auto hidden grid-cols-3 gap-6 border-t border-gray-200 bg-gray-100 px-4 pt-6 pb-2 text-gray-600 md:grid dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400 [&_a:hover]:underline [&_a:hover]:underline-offset-4"><div class="flex min-w-20 flex-wrap items-center gap-1"><a href=https://www.linkedin.com/company/docker aria-label=LinkedIn><span class=icon-svg><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_230_168" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20"><path d="M18 2c2.2091.0 4 1.79086 4 4V18c0 2.2091-1.7909 4-4 4H6c-2.20914.0-4-1.7909-4-4V6C2 3.79086 3.79086 2 6 2H18zM15.0762 8.78418C13.7764 8.78418 12.9253 9.62482 12.6807 10.1172H12.6494V9.00879H10.2266V17.0137h2.5195V12.6738c0-1.1569.732099999999999-1.7207 1.4805-1.7207C14.9329 10.9532 15.4823 11.3514 15.4824 12.6406v4.3731H18.001V12.0625c0-2.44412-1.5189-3.2783-2.9248-3.27832zm-8.88382.21875V17.0068H8.71191V9.00293H6.19238zM7.45215 5C6.65026 5.00021 6.00023 5.64761 6 6.44629c0 .79887.65011 1.44706 1.45215 1.44726C8.25436 7.89355 8.90527 7.24529 8.90527 6.44629 8.90504 5.64749 8.25422 5 7.45215 5z" fill="#6C7E9D"/></mask><g mask="url(#mask0_230_168)"><rect width="24" height="24" fill="#4B83F1"/></g></svg>
</span></a><a href=https://x.com/docker/ aria-label=Twitter><span class=icon-svg><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_230_151" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20"><path d="M18 2c2.2091.0 4 1.79086 4 4V18c0 2.2091-1.7909 4-4 4H6c-2.20914.0-4-1.7909-4-4V6C2 3.79086 3.79086 2 6 2H18zM10.9209 12.7061 7 17.2637h.88574l3.42876-3.9854 2.7382 3.9854H17.043l-4.0664-5.918L16.7158 7H15.8301L12.583 10.7734 9.99023 7H7l3.9209 5.7061zm1.1963-1.3907L12.5146 11.8838l3.3155 4.7432H14.4697l-2.706-3.8702L11.3662 12.1885 8.20508 7.66699H9.56641L12.1172 11.3154z" fill="#6C7E9D"/></mask><g mask="url(#mask0_230_151)"><rect width="24" height="24" fill="#4B83F1"/></g></svg>
</span></a><a href=https://www.facebook.com/docker.run aria-label=Facebook><span class=icon-svg><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_230_146" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20"><path d="M18 2c2.2091.0 4 1.79086 4 4V18c0 2.2091-1.7909 4-4 4H6c-2.20914.0-4-1.7909-4-4V6C2 3.79086 3.79086 2 6 2H18zM13.625 4.85742C11.5908 4.85753 10.2617 6.09028 10.2617 8.32227V10.2842H8v2.5742h2.2617V19.082C10.715 19.1532 11.18 19.1904 11.6533 19.1904 12.1264 19.1904 12.5908 19.1531 13.0439 19.082V12.8584h2.0752l.3955-2.5742H13.0439V8.61328C13.0441 7.9091 13.39 7.22266 14.4961 7.22266h1.123V5.03125s-1.0197-.17383-1.9941-.17383z" fill="#6C7E9D"/></mask><g mask="url(#mask0_230_146)"><rect width="24" height="24" fill="#4B83F1"/></g></svg>
</span></a><a href=http://www.youtube.com/user/dockerrun aria-label=YouTube><span class=icon-svg><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_230_161" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20"><path d="M18 2c2.2091.0 4 1.79086 4 4V18c0 2.2091-1.7909 4-4 4H6c-2.20914.0-4-1.7909-4-4V6C2 3.79086 3.79086 2 6 2H18zM11.9355 7.72754C11.9019 7.72754 8.13938 7.7287 7.19727 7.98242 6.67567 8.12299 6.26429 8.53652 6.125 9.06152 5.87349 10.0064 5.87111 11.9686 5.87109 12 5.87111 12.0315 5.87342 13.9947 6.125 14.9395 6.26446 15.4641 6.67588 15.878 7.19727 16.0186 8.14047 16.2722 11.9019 16.2734 11.9355 16.2734 11.9792 16.2734 15.7348 16.2721 16.6748 16.0186 17.1961 15.8779 17.6077 15.4641 17.7471 14.9395 17.9986 13.9953 18 12.0314 18 12S17.9985 10.0065 17.7471 9.06152C17.6079 8.5367 17.1961 8.12318 16.6748 7.98242 15.7348 7.72891 11.9792 7.72755 11.9355 7.72754zM13.8652 12l-3.1699 1.8037V10.1973L13.8652 12z" fill="#6C7E9D"/></mask><g mask="url(#mask0_230_161)"><rect width="24" height="24" fill="#4B83F1"/></g></svg>
</span></a><a href=https://www.instagram.com/dockerinc/ aria-label=Instagram><span class=icon-svg><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><mask id="mask0_230_156" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 2C3.79086 2 2 3.79086 2 6V18c0 2.2091 1.79086 4 4 4H18c2.2091.0 4-1.7909 4-4V6c0-2.20914-1.7909-4-4-4H6zM7.82824 6.03828C8.21814 5.8855 8.66433 5.78086 9.31759 5.75002 9.97247 5.7186 10.1815 5.71145 11.8485 5.70826 13.5159 5.70508 13.725 5.71144 14.3798 5.7405 15.0333 5.76874 15.4797 5.87179 15.8704 6.02297c.404199999999999.15576.7471.36543 1.0889.7058C17.3011 7.06953 17.5115 7.41129 17.6693 7.81491 17.8218 8.20521 17.9265 8.65101 17.9575 9.30467 17.9885 9.95935 17.9961 10.1682 17.9993 11.8354 18.0025 13.5024 17.9957 13.7117 17.9671 14.367 17.9386 15.0201 17.8358 15.4666 17.6846 15.8572 17.5284 16.2614 17.3192 16.6043 16.9788 16.9461 16.6384 17.288 16.2963 17.4983 15.8927 17.6563 15.5024 17.8086 15.0566 17.9133 14.4033 17.9445 13.7485 17.9755 13.5394 17.9829 11.8718 17.9861 10.205 17.9893 9.99592 17.9829 9.34107 17.954 8.6876 17.9254 8.241 17.8226 7.85052 17.6716 7.4463 17.5152 7.10336 17.3061 6.76161 16.9656 6.41965 16.625 6.209 16.283 6.05146 15.8794 5.89868 15.4893 5.79443 15.0433 5.7632 14.3903 5.73198 13.7352 5.72462 13.5259 5.72144 11.8589 5.71825 10.1917 5.72482 9.98282 5.75345 9.32794 5.78231 8.67426 5.88475 8.22786 6.03594 7.83697c.15615-.40402.36543-.74677.70618-1.08873C7.08248 6.40649 7.42461 6.19563 7.82824 6.03828zM8.24897 16.6401C8.4656 16.7235 8.79065 16.8229 9.38922 16.849 10.0369 16.877 10.2309 16.8832 11.8698 16.88 13.5093 16.877 13.7033 16.8701 14.3508 16.8396 14.9488 16.8112 15.2738 16.7105 15.4898 16.6262 15.7765 16.5142 15.9806 16.3803 16.195 16.1657 16.4095 15.9502 16.5422 15.7455 16.6532 15.4589 16.7367 15.2421 16.836 14.9168 16.862 14.3182 16.8905 13.6709 16.8964 13.4768 16.8932 11.8374 16.8903 10.1985 16.8833 10.0043 16.8525 9.35679 16.8242 8.75862 16.7238 8.43356 16.6392 8.21773 16.5272 7.93069 16.3938 7.72698 16.1785 7.51233 15.9633 7.29769 15.7586 7.16541 15.4715 7.0544 15.2553 6.97066 14.9299 6.87159 14.3317 6.84553 13.684 6.81708 13.4898 6.81131 11.8505 6.8145 10.2116 6.81768 10.0176 6.82425 9.37011 6.85489 8.77175 6.88333 8.4471 6.98379 8.23068 7.06834 7.94421 7.18033 7.74012 7.31341 7.52548 7.52885 7.31123 7.74429 7.17856 7.94858 7.06756 8.23584 6.98441 8.45228 6.88435 8.77772 6.85869 9.37589 6.83043 10.0236 6.82448 10.2178 6.82764 11.8567 6.83064 13.4961 6.83759 13.6902 6.86804 14.3373 6.89609 14.9359 6.99733 15.2606 7.08148 15.4772 7.19348 15.7634 7.32696 15.9676 7.54199 16.1822 7.75743 16.396 7.96213 16.5291 8.24897 16.6401zM15.1324 9.30031C14.7258 9.3011 14.3952 8.97188 14.3944 8.56527 14.3936 8.15867 14.7228 7.82804 15.1296 7.82725 15.5364 7.82645 15.867 8.15587 15.8678 8.56247 15.8684 8.96909 15.5392 9.29951 15.1324 9.30031zM11.8662 14.9994C10.1254 15.0027 8.71128 13.5943 8.7079 11.8531 8.70451 10.1123 10.1133 8.69794 11.8541 8.69455 13.5953 8.69117 15.0096 10.1004 15.013 11.841 15.0164 13.5822 13.6072 14.996 11.8662 14.9994zM11.8563 9.80079C10.7264 9.80278 9.81172 10.7208 9.81371 11.8509 9.8159 12.9812 10.7341 13.8957 11.864 13.8935 12.9943 13.8913 13.909 12.9735 13.9068 11.8432S12.9864 9.7986 11.8563 9.80079z" fill="#6C7E9D"/></mask><g mask="url(#mask0_230_156)"><rect width="24" height="24" fill="#4B83F1"/></g></svg></span></a></div><div class="flex items-center justify-center gap-3"><a href=https://www.docker.com/ class="inline-flex truncate whitespace-normal">Product offerings</a>
<a href="https://www.docker.com/pricing?ref=Docs&refAction=DocsFooter" class="inline-flex truncate whitespace-normal">Pricing</a>
<a href=https://www.docker.com/company/ class="inline-flex truncate whitespace-normal">About us</a>
<a href=/llms.txt class="inline-flex truncate whitespace-normal">llms.txt</a></div><div class="flex items-center justify-end"><button type=button id=ot-sdk-btn class="ot-sdk-show-settings whitespace-normal md:truncate">
Cookies Settings
</button>
<span class="mx-1 text-gray-400">|</span>
<a title="Docker Terms of Service" href=https://www.docker.com/legal/docker-terms-service class="whitespace-normal md:truncate">Terms of Service</a>
<span class="mx-1 text-gray-400">|</span>
<a title="Docker Systems Status Page" href=https://www.dockerstatus.com/ class="whitespace-normal md:truncate">Status</a>
<span class="mx-1 text-gray-400">|</span>
<a title="Docker Legal Terms" href=https://www.docker.com/legal class="whitespace-normal md:truncate">Legal</a></div></div><div class="border-t border-gray-200 bg-gray-100 px-4 py-4 text-sm text-gray-400 md:border-none dark:border-gray-700 dark:bg-gray-900 dark:text-gray-600"><span>Copyright © 2013-2026 Docker Inc. All rights
reserved.</span></div></footer></body></html>