podman-desktop/tutorial/getting-started-with-compose.html
github-actions[bot] 47cc2fc964 deploy: 3eccd8215f
2026-04-14 16:10:55 +00:00

154 lines
No EOL
48 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-tutorial docs-version-current docs-doc-page docs-doc-id-getting-started-with-compose" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Getting started with Compose | Podman Desktop</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://podman-desktop.io/img/banner_podman-desktop.png"><meta data-rh="true" name="twitter:image" content="https://podman-desktop.io/img/banner_podman-desktop.png"><meta data-rh="true" property="og:url" content="https://podman-desktop.io/tutorial/getting-started-with-compose"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-tutorial-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-tutorial-current"><meta data-rh="true" property="og:title" content="Getting started with Compose | Podman Desktop"><meta data-rh="true" name="description" content="Getting started with Compose on Podman Desktop"><meta data-rh="true" property="og:description" content="Getting started with Compose on Podman Desktop"><meta data-rh="true" name="keywords" content="podman-desktop,compose,containers,containerfile,docker-compose,dockerfile,multi-container"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://podman-desktop.io/tutorial/getting-started-with-compose"><link data-rh="true" rel="alternate" href="https://podman-desktop.io/tutorial/getting-started-with-compose" hreflang="en"><link data-rh="true" rel="alternate" href="https://podman-desktop.io/tutorial/getting-started-with-compose" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://MR01ANKQ9S-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Getting started with Compose","item":"https://podman-desktop.io/tutorial/getting-started-with-compose"}]}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Podman Desktop RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Podman Desktop Atom Feed">
<link rel="alternate" type="application/json" href="/blog/feed.json" title="Podman Desktop JSON Feed">
<link rel="search" type="application/opensearchdescription+xml" title="Podman Desktop" href="/opensearch.xml">
<link rel="preconnect" href="https://podman-desktop-website.goatcounter.com">
<script async src="//gc.zgo.at/count.js" data-goatcounter="https://podman-desktop-website.goatcounter.com/count"></script><link rel="stylesheet" href="/assets/css/styles.3f3a95ee.css">
<script src="/assets/js/runtime~main.33684669.js" defer="defer"></script>
<script src="/assets/js/main.63bff3da.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="Podman Desktop Logo" class="themedComponent_siVc themedComponent--light_hHel" height="56"><img src="/img/logo.svg" alt="Podman Desktop Logo" class="themedComponent_siVc themedComponent--dark_yETr" height="56"></div><b class="navbar__title text--truncate">podman desktop</b></a><a class="navbar__item navbar__link" href="/docs/intro">Documentation</a><a class="navbar__item navbar__link" href="/downloads">Downloads</a><a class="navbar__item navbar__link" href="/community">Community</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Resources</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/features">Features</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/tutorial">Tutorials</a></li><li><a class="dropdown__link" href="/extend">Extend</a></li></ul></div><a class="navbar__item navbar__link" href="/blog">Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/podman-desktop/podman-desktop" target="_blank" id="github-stars-button" rel="noopener noreferrer" class="navbar__item navbar__link hidden xl:flex items-center gap-2 px-4 mr-3 py-[9px] border border-black dark:border-white rounded-lg font-medium min-w-[9rem] text-base"><svg data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" viewBox="0 0 512 512" aria-hidden="true"><path fill="currentColor" d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM252.8 8c-138.7 0-244.8 105.3-244.8 244 0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1 100-33.2 167.8-128.1 167.8-239 0-138.7-112.5-244-251.2-244zM105.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><span>Star</span><span id="github-stars-badge" class="ml-2 px-2 py-1 bg-gray-400 dark:bg-charcoal-600 rounded text-black dark:text-gray-100 text-xs min-w-[2.5rem] text-center">7.5k</span></a><div><a class="hidden xl:flex font-semibold no-underline hover:no-underline items-center text-white hover:text-white bg-gradient-to-b from-violet-500 to-violet-600 border-0 py-3 px-6 focus:outline-hidden hover:from-violet-600 hover:to-violet-700 rounded-lg text-base mt-0 mb-0 ml-4 mr-2" href="/downloads">Download</a></div><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_k9hJ lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_k9hJ darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_k9hJ systemToggleIcon_E5c0"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_bzqh"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_MB5r"><div class="docsWrapper__sE8"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_iEvu" type="button"></button><div class="docRoot_DfVB"><aside class="theme-doc-sidebar-container docSidebarContainer_c7NB"><div class="sidebarViewport_KYo0"><div class="sidebar_CUen"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_jmj1"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial"><span title="Introduction" class="linkLabel_fEdy">Introduction</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/running-a-pod-using-a-container-docker-file"><span title="Running a pod using a container or docker file" class="linkLabel_fEdy">Running a pod using a container or docker file</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/running-a-kubernetes-cluster"><span title="Running a Kubernetes cluster" class="linkLabel_fEdy">Running a Kubernetes cluster</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/deploying-a-kubernetes-application"><span title="Deploying a Kubernetes application" class="linkLabel_fEdy">Deploying a Kubernetes application</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/interacting-with-a-database-server"><span title="Interacting with a database server" class="linkLabel_fEdy">Interacting with a database server</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/managing-your-application-resources"><span title="Managing your application resources" class="linkLabel_fEdy">Managing your application resources</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/running-an-ai-application"><span title="Running an AI application" class="linkLabel_fEdy">Running an AI application</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/creating-an-extension"><span title="Creating an extension" class="linkLabel_fEdy">Creating an extension</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/tutorial/getting-started-with-compose"><span title="Getting started with Compose" class="linkLabel_fEdy">Getting started with Compose</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorial/testcontainers-with-podman"><span title="Testcontainers with Podman" class="linkLabel_fEdy">Testcontainers with Podman</span></a></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_oTwn"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_pMEX"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_a9sJ"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_Qr34"><div class="docItemContainer_tjFy"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_T5ub" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_sfvy"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Getting started with Compose</span></li></ul></nav><div class="tocCollapsible_wXna theme-doc-toc-mobile tocMobile_Ojys"><button type="button" class="clean-btn tocCollapsibleButton_iI2p">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Getting started with Compose</h1></header>
<p><a href="https://www.compose-spec.io/" target="_blank" rel="noopener noreferrer" class="">Compose is a specification</a> for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your applications services, networks, and volumes. This allows you to capture in a single file the entire configuration necessary to run a set of interconnected containers as an application. For example, if you have an application that requires a web server, a database, and a caching service, you can define these components and their relationships in your Compose file.</p>
<p>To use the Compose YAML, you can leverage a specification implementation, such as <a href="https://docs.podman.io/en/latest/markdown/podman-compose.1.html" target="_blank" rel="noopener noreferrer" class=""><code>podman compose</code></a> and <a href="https://github.com/docker/compose" target="_blank" rel="noopener noreferrer" class=""><code>docker compose</code></a>.</p>
<p>This tutorial covers the following end-to-end tasks required to use a multi-container Compose application within Podman Desktop:</p>
<ul>
<li class=""><a class="" href="/tutorial/getting-started-with-compose#download-and-run-the-example-application">Download and run the example application</a> using <code>podman compose up</code>.</li>
<li class=""><a class="" href="/tutorial/getting-started-with-compose#viewing-the-guestbook-application">View the guestbook web application</a>.</li>
<li class=""><a class="" href="/tutorial/getting-started-with-compose#viewing-and-modifying-the-database">View and modify the database</a> to check the guestbook web application is synchronized and running correctly.</li>
<li class=""><a class="" href="/tutorial/getting-started-with-compose#scaling-more-replicas">Scale database replicas</a>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_tleR" id="before-you-begin">Before you begin<a href="#before-you-begin" class="hash-link" aria-label="Direct link to Before you begin" title="Direct link to Before you begin" translate="no"></a></h2>
<p>If you do not have Compose installed, you can follow the complete onboarding process to install it system wide:</p>
<ol>
<li class="">
<p>Install the Compose extension from the catalog. For more details, see <a href="https://podman-desktop.io/docs/extensions/install" target="_blank" rel="noopener noreferrer" class="">Installing a Podman Desktop extension</a>.</p>
</li>
<li class="">
<p>Set up Compose and complete the onboarding process to configure it system-wide.
<img decoding="async" loading="lazy" alt="Onboarding process" src="/assets/images/onboarding-59e0db2497389dec25a3b6bb8844a893.png" width="1496" height="1206" class="img_SS3x"></p>
</li>
<li class="">
<p>Check that you are able to run <code>podman compose</code>:</p>
<div class="language-sh codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-sh codeBlock_RMoD thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_AclH"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">podman</span><span class="token plain"> compose</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Run compose workloads via an external provider such as </span><span class="token function" style="color:rgb(80, 250, 123)">docker-compose</span><span class="token plain"> or </span><span class="token function" style="color:rgb(80, 250, 123)">podman-compose</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Description:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> This </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> is a thin wrapper around an external compose provider such as </span><span class="token function" style="color:rgb(80, 250, 123)">docker-compose</span><span class="token plain"> or podman-compose. This means that </span><span class="token function" style="color:rgb(80, 250, 123)">podman</span><span class="token plain"> compose is executing another tool that implements the compose functionality but sets up the environment </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"> a way to </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">let</span><span class="token plain"> the compose provider communicate transparently with the </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">local</span><span class="token plain"> Podman socket. The specified options as well the </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> and argument are passed directly to the compose provider.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></span></code></pre></div></div>
</li>
</ol>
<div class="theme-admonition theme-admonition-note admonition_WCGJ alert alert--secondary"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_pbrs"><p>If Compose is already installed, you have the option to upgrade or downgrade its version by navigating to the <strong>Settings &gt; CLI Tools</strong> page.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_tleR" id="download-and-run-the-example-application">Download and run the example application<a href="#download-and-run-the-example-application" class="hash-link" aria-label="Direct link to Download and run the example application" title="Direct link to Download and run the example application" translate="no"></a></h2>
<p>Our example application is located at <a href="https://github.com/redhat-developer/podman-desktop-demo" target="_blank" rel="noopener noreferrer" class="">github.com/redhat-developer/podman-desktop-demo</a>.</p>
<ol>
<li class="">
<p>Run <code>git clone</code> to build the Go binary web application:</p>
<div class="language-sh codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-sh codeBlock_RMoD thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_AclH"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> clone https://github.com/redhat-developer/podman-desktop-demo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> podman-desktop-demo/guestbook-compose</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>Run <code>podman compose up -d</code> to start the application:</p>
<div class="language-sh codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-sh codeBlock_RMoD thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_AclH"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">podman</span><span class="token plain"> compose up </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;&gt;</span><span class="token plain"> Executing external compose provider </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;/usr/local/bin/docker-compose&quot;</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">.</span><span class="token plain"> Please refer to the documentation </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> details. </span><span class="token operator">&lt;&lt;&lt;</span><span class="token operator">&lt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">+</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> Running </span><span class="token number">3</span><span class="token plain">/3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container redis-replica Started </span><span class="token number">0</span><span class="token plain">.0s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container web Started </span><span class="token number">0</span><span class="token plain">.0s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container redis-leader Started </span><span class="token number">0</span><span class="token plain">.0s</span><br></span></code></pre></div></div>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_tleR" id="viewing-the-guestbook-application">Viewing the guestbook application<a href="#viewing-the-guestbook-application" class="hash-link" aria-label="Direct link to Viewing the guestbook application" title="Direct link to Viewing the guestbook application" translate="no"></a></h2>
<p>Within Podman Desktop, you can now see that all three containers are up and operational.</p>
<ol>
<li class="">
<p>Click the &quot;Open Browser&quot; button to view the web application:
<img decoding="async" loading="lazy" alt="Open browser" src="/assets/images/openbrowser-9dda9ceaa832418fc532135f5921ccf2.png" width="2850" height="828" class="img_SS3x"></p>
</li>
<li class="">
<p>Within the Guestbook web application, you can:</p>
<ul>
<li class="">
<p>&quot;Sign&quot; the guestbook, which will write to the Redis leader and synchronize to the replicas.</p>
</li>
<li class="">
<p>&quot;Read&quot; from the guestbook, which will read from the pool of Redis replicas. This allows for readability even if the Redis leader is unavailable.</p>
</li>
<li class="">
<p><code>/env</code>: View the container&#x27;s environment variables.</p>
</li>
<li class="">
<p><code>/info</code>: View information about the Redis cluster.</p>
<p><img decoding="async" loading="lazy" alt="Guestbook application" src="/assets/images/helloworld-516adc89ef8a509fb5ce998d3b0ea94b.png" width="949" height="653" class="img_SS3x"></p>
</li>
</ul>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_tleR" id="viewing-and-modifying-the-database">Viewing and modifying the database<a href="#viewing-and-modifying-the-database" class="hash-link" aria-label="Direct link to Viewing and modifying the database" title="Direct link to Viewing and modifying the database" translate="no"></a></h2>
<p>Using Podman Desktop, you can also access the container&#x27;s terminal directly from the GUI and modify the database.</p>
<ol>
<li class="">
<p>Click <strong>Open Terminal</strong> to access the <code>redis-leader</code> terminal:</p>
<p><img decoding="async" loading="lazy" alt="Open terminal" src="/assets/images/openterminal-32b76b2c26213e8cd4139cf9783b456c.png" width="2408" height="1070" class="img_SS3x"></p>
</li>
<li class="">
<p>Modify the database as if you are doing database administration:</p>
<ol>
<li class="">
<p>Run <code>redis-cli</code> within the container to access the Redis database.</p>
</li>
<li class="">
<p>Type <code>LPUSH guestbook &quot;Hello World!&quot;</code> and you will see your web application update in real-time.</p>
</li>
<li class="">
<p>Type <code>DEL guestbook</code> and you will see that your database drops the <code>guestbook</code> key and clears the database.</p>
<p><img decoding="async" loading="lazy" alt="Redis CLI" src="/assets/images/redis-cli-45bdb3866b5813d2cc9009e5474f0117.png" width="1652" height="534" class="img_SS3x"></p>
<p>Changes will reflect in real-time on the guestbook.</p>
</li>
</ol>
</li>
</ol>
<p>You can further modify the database and see the changes propagate to the Redis replicas. For example, view the logs of the <code>redis-replica</code>, and you will notice that there are periodic database synchronizations as well as reads to the database:</p>
<p><img decoding="async" loading="lazy" alt="Redis replica logs" src="/assets/images/redisreplica-c911ec791d20083c803f63c6d86f4b70.png" width="1680" height="1148" class="img_SS3x"></p>
<h3 class="anchor anchorTargetStickyNavbar_tleR" id="how-does-it-work">How does it work?<a href="#how-does-it-work" class="hash-link" aria-label="Direct link to How does it work?" title="Direct link to How does it work?" translate="no"></a></h3>
<p>A quick overview of how the architecture works in this multi-container scenario:</p>
<ul>
<li class="">Within the Guestbook application, it looks for a database with the names <code>redis-leader</code> and <code>redis-replica</code> on port <code>6379</code>.</li>
<li class="">Because it is a Compose application, the containers are connected on the same network. This means that a neighboring container can be network-accessible simply by its container name.</li>
</ul>
<p>There is a set of environment variables that the web application can modify in the Compose application:</p>
<ul>
<li class=""><code>REDIS_LEADER</code>: The default is <code>redis-leader</code>.</li>
<li class=""><code>REDIS_REPLICAS</code>: The default is <code>redis-replica</code>. It can be comma-separated, such as <code>redis-replica-1,redis-replica-2</code>.</li>
<li class=""><code>REDIS_PORT</code>: The default is <code>6379</code>.</li>
<li class=""><code>SERVER_PORT</code>: The default is <code>8080</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_tleR" id="scaling-more-replicas">Scaling more replicas<a href="#scaling-more-replicas" class="hash-link" aria-label="Direct link to Scaling more replicas" title="Direct link to Scaling more replicas" translate="no"></a></h2>
<p>Want to scale more replicas? This can be achieved by adding an environment variable to your <code>compose.yaml</code> and duplicating your <code>redis-replica</code> entry.</p>
<ol>
<li class="">
<p>Modify your <code>compose.yaml</code> as follows:</p>
<div class="language-yaml codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-yaml codeBlock_RMoD thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_AclH"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">services</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">redis-leader</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">container_name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">leader</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;6379&#x27;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">redis-replica</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">container_name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">replica</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;6379&#x27;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">server </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">replicaof redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">leader 6379</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">redis-replica-2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">container_name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">replica</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token number">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;6379&#x27;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">server </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">replicaof redis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">leader 6379</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">web</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">container_name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> web</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">build</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> ./web</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">ports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&#x27;8080:8080&#x27;</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>Run <code>podman compose up -d</code> again to ensure the new container has been added and the new environment variable has propagated:</p>
<div class="language-sh codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-sh codeBlock_RMoD thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_AclH"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">podman</span><span class="token plain"> compose up </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token operator">&gt;&gt;</span><span class="token operator">&gt;&gt;</span><span class="token plain"> Executing external compose provider </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;/usr/local/bin/docker-compose&quot;</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">.</span><span class="token plain"> Please refer to the documentation </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> details. </span><span class="token operator">&lt;&lt;&lt;</span><span class="token operator">&lt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">+</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> Running </span><span class="token number">4</span><span class="token plain">/4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container redis-replica-2 Started </span><span class="token number">0</span><span class="token plain">.0s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container redis-leader Running </span><span class="token number">0</span><span class="token plain">.0s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container web Started </span><span class="token number">0</span><span class="token plain">.0s</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">✔ Container redis-replica Running </span><span class="token number">0</span><span class="token plain">.0s</span><br></span></code></pre></div></div>
</li>
</ol></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-tags-row"><div class="col"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a rel="tag" class="tag_otG2 tagRegular_s0E1" href="/tutorial/tags/podman-desktop">podman-desktop</a></li><li class="tag_DFxh"><a rel="tag" class="tag_otG2 tagRegular_s0E1" href="/tutorial/tags/working-with-compose">working-with-compose</a></li></ul></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/tutorial/creating-an-extension"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Creating an extension</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/tutorial/testcontainers-with-podman"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Testcontainers with Podman</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_XG6w thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#before-you-begin" class="table-of-contents__link toc-highlight">Before you begin</a></li><li><a href="#download-and-run-the-example-application" class="table-of-contents__link toc-highlight">Download and run the example application</a></li><li><a href="#viewing-the-guestbook-application" class="table-of-contents__link toc-highlight">Viewing the guestbook application</a></li><li><a href="#viewing-and-modifying-the-database" class="table-of-contents__link toc-highlight">Viewing and modifying the database</a><ul><li><a href="#how-does-it-work" class="table-of-contents__link toc-highlight">How does it work?</a></li></ul></li><li><a href="#scaling-more-replicas" class="table-of-contents__link toc-highlight">Scaling more replicas</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/installation">Installing Podman Desktop</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/migrating-from-docker">Migrating from Docker</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/kubernetes">Working with Kubernetes</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/troubleshooting">Troubleshooting</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Links</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/podman-desktop/podman-desktop" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPrP"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://discord.com/invite/x5GzFF6QH4" target="_blank" rel="noopener noreferrer" class="footer__link-item">Chat (bridged): #podman-desktop on Discord<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPrP"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/podman-desktop/podman-desktop#communication" target="_blank" rel="noopener noreferrer" class="footer__link-item">Other ways to Communicate<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPrP"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/orgs/podman-desktop/projects/4/views/3" target="_blank" rel="noopener noreferrer" class="footer__link-item">Current Sprint<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPrP"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">
<div class="flex flex-col items-start text-left gap-4">
<div class="w-96 mt-8 mb-8">
<img class="dark:hidden" alt="Cloud Native Computing Foundation" src="/img/cncf-logo.svg">
<img class="hidden dark:inline" alt="Cloud Native Computing Foundation" src="/img/cncf-logo-dark.svg">
</div>
<div class="text-sm">
<p class="mb-1">We are a <a href="https://cncf.io/" class="underline">Cloud Native Computing Foundation</a> sandbox project.</p>
<p class="mb-1">© Copyright Podman Desktop Contributors 2026. © 2026 The Linux Foundation. All rights reserved.</p>
<p class="mb-1">The Linux Foundation has registered trademarks and uses trademarks.
For a list of trademarks of The Linux Foundation, please see our
<a href="https://www.linuxfoundation.org/trademark-usage/" class="underline"> Trademark Usage</a> page.</p>
</div>
</div>
</div></div></div></footer></div>
</body>
</html>