Skip to content

docs: add Podman provider documentation#285

Merged
skevetter merged 5 commits into
mainfrom
skevetter/devsy-101-podman-docs
May 14, 2026
Merged

docs: add Podman provider documentation#285
skevetter merged 5 commits into
mainfrom
skevetter/devsy-101-podman-docs

Conversation

@skevetter

@skevetter skevetter commented May 14, 2026

Copy link
Copy Markdown
Contributor

Summary

  • New tutorial: docs/pages/tutorials/podman-provider-setup.mdx — comprehensive Podman provider setup guide covering Linux, macOS, and Windows prerequisites, provider registration, configuration options (PODMAN_PATH, PODMAN_HOST, INACTIVITY_TIMEOUT), rootless vs rootful setup, workspace creation, and troubleshooting
  • Promoted Podman to first-party provider in docs/pages/managing-providers/add-provider.mdx — moved from community providers list to the built-in providers list with link to providers/podman
  • Added sidebar entry in docs/sidebars.js for the new tutorial
  • Added Podman troubleshooting section to docs/pages/troubleshooting/linux-troubleshooting.mdx covering rootless socket paths, podman compose compatibility, BuildKit/buildah differences, and volume mount permissions in rootless mode

Closes DEVSY-101.

Summary by CodeRabbit

  • Documentation
    • Podman promoted to 1st-party provider status with updated provider documentation
    • Added comprehensive Linux troubleshooting guide for Podman covering socket configuration, compose compatibility, BuildKit/buildah limitations, and volume mount permissions
    • New Podman provider setup tutorial with installation, configuration, and workspace verification instructions

Review Change Stack

skevetter added 5 commits May 14, 2026 07:15
- Replace Buildah build attribution with accurate `podman build` phrasing
- Add UID hint for PODMAN_HOST socket path examples
- Use `id -u` in troubleshooting socket example
- Simplify provider registration description
- Replace podman machine init --rootful with sudo podman (Linux page)
- Demote heading levels to match existing ### hierarchy
- Remove macOS/Windows guidance from Linux troubleshooting page
@netlify

netlify Bot commented May 14, 2026

Copy link
Copy Markdown

Deploy Preview for devsydev ready!

Name Link
🔨 Latest commit b69d104
🔍 Latest deploy log https://app.netlify.com/projects/devsydev/deploys/6a05c27717fad00008f07247
😎 Deploy Preview https://deploy-preview-285--devsydev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai

coderabbitai Bot commented May 14, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR adds comprehensive documentation for Podman as a 1st-party Devsy provider. It repositions Podman from community status to the default provider list, introduces a new setup tutorial covering cross-platform installation and configuration, and provides Linux-specific troubleshooting for socket, compose, build, and permission issues.

Changes

Podman Provider Documentation

Layer / File(s) Summary
Provider positioning and navigation
docs/pages/managing-providers/add-provider.mdx, docs/sidebars.js
Adds Podman to the 1st-party provider list in add-provider.mdx, removes it from community providers, and registers the new tutorial in the documentation sidebar.
Comprehensive Podman setup tutorial
docs/pages/tutorials/podman-provider-setup.mdx
New tutorial guides users through Podman installation on Linux/macOS/Windows, registering the built-in provider, configuring PODMAN_PATH/PODMAN_HOST/INACTIVITY_TIMEOUT, choosing rootless vs rootful modes, creating and verifying workspaces, and troubleshooting socket, machine, build, and compose-compatibility issues.
Linux-specific troubleshooting section
docs/pages/troubleshooting/linux-troubleshooting.mdx
New Podman section documents rootless socket configuration via PODMAN_HOST, podman compose vs docker-compose compatibility with optional aliasing, BuildKit feature incompatibilities and workarounds, and rootless volume mount permissions using SELinux labels or ownership correction.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~4 minutes

Suggested labels

size/s

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title directly and clearly summarizes the main change: adding Podman provider documentation across multiple files (tutorial, provider list, troubleshooting, and sidebar).
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@skevetter
skevetter marked this pull request as ready for review May 14, 2026 12:45
@skevetter
skevetter enabled auto-merge (squash) May 14, 2026 12:45
@coderabbitai coderabbitai Bot added the size/s label May 14, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/pages/troubleshooting/linux-troubleshooting.mdx`:
- Around line 94-95: Change the absolutist sentence that "Files created inside
the container appear owned by `nobody` on the host" to a softened statement:
note that Rootless Podman maps UIDs via user namespaces and files on the host
can show as `nobody` or as other numeric UIDs/GIDs depending on the system's
subuid/subgid mappings; update the paragraph beginning "Rootless Podman maps
UIDs through user namespaces." to reflect this variability and mention checking
subuid/subgid configuration when ownership looks unexpected.

In `@docs/pages/tutorials/podman-provider-setup.mdx`:
- Around line 57-61: The text "Verify the socket is reachable from Windows" is
misleading because the shown command (echo $XDG_RUNTIME_DIR/podman/podman.sock)
runs in WSL and only prints the Linux-side path; update Step 3 wording to
clarify the execution context by stating that the command should be run inside
WSL (or the Linux environment) to display the socket path and separately
instruct how to confirm Windows can reach that socket (for example by
translating the path or testing with a Windows-side client), and keep the
example command `echo $XDG_RUNTIME_DIR/podman/podman.sock` as the WSL-specific
step.
- Around line 145-149: Replace the in-workspace check that tells users to run
"podman --version" (which can fail because workspace images may not include the
Podman CLI) with provider/runtime verification commands: instruct users to run
"devsy provider list" to confirm the provider is Podman and/or run "podman ps"
on the host to inspect running containers; update the text around the former
"podman --version" mention to show these alternative commands ("devsy provider
list" and "podman ps") and remove the in-container Podman version check.
- Line 180: Replace the inaccurate sentence that claims "podman compose" is "a
built-in subcommand backed by the `podman-compose` Python library" with neutral
wording stating that Podman v4+ includes the `podman compose` command and that
it is compatible with `docker-compose` v2 syntax for most workloads; update the
paragraph containing the phrase "podman compose" so it no longer asserts a
specific backing provider and instead notes that the backing provider can vary.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 68820df8-c2cc-4ae8-b0a3-cf6cd8da7f52

📥 Commits

Reviewing files that changed from the base of the PR and between 49ed3fe and b69d104.

📒 Files selected for processing (4)
  • docs/pages/managing-providers/add-provider.mdx
  • docs/pages/troubleshooting/linux-troubleshooting.mdx
  • docs/pages/tutorials/podman-provider-setup.mdx
  • docs/sidebars.js

Comment on lines +94 to +95
Rootless Podman maps UIDs through user namespaces. Files created inside the container appear owned by `nobody` on the host.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Make ownership outcome less absolute.

Line 94 says files appear as nobody, but rootless mappings can appear as different numeric UIDs/GIDs depending on subuid/subgid setup. Soften wording to avoid inaccurate troubleshooting expectations.

Suggested doc tweak
-Rootless Podman maps UIDs through user namespaces. Files created inside the container appear owned by `nobody` on the host.
+Rootless Podman maps UIDs through user namespaces. Files created inside the container may appear owned by an unexpected UID/GID (sometimes shown as `nobody`) on the host.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Rootless Podman maps UIDs through user namespaces. Files created inside the container appear owned by `nobody` on the host.
Rootless Podman maps UIDs through user namespaces. Files created inside the container may appear owned by an unexpected UID/GID (sometimes shown as `nobody`) on the host.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/pages/troubleshooting/linux-troubleshooting.mdx` around lines 94 - 95,
Change the absolutist sentence that "Files created inside the container appear
owned by `nobody` on the host" to a softened statement: note that Rootless
Podman maps UIDs via user namespaces and files on the host can show as `nobody`
or as other numeric UIDs/GIDs depending on the system's subuid/subgid mappings;
update the paragraph beginning "Rootless Podman maps UIDs through user
namespaces." to reflect this variability and mention checking subuid/subgid
configuration when ownership looks unexpected.

Comment on lines +57 to +61
**Step 3 — Verify the socket is reachable from Windows.** Note the socket path — you will need it for the `PODMAN_HOST` option:

```bash
echo $XDG_RUNTIME_DIR/podman/podman.sock
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify execution context for the socket check.

Line 57 says “reachable from Windows,” but the command shown is executed in WSL and only prints the Linux-side socket path. Rewording avoids confusion.

Suggested doc tweak
-**Step 3 — Verify the socket is reachable from Windows.** Note the socket path — you will need it for the `PODMAN_HOST` option:
+**Step 3 — Verify the Podman socket path inside WSL.** Note this path — you will need it for the `PODMAN_HOST` option:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/pages/tutorials/podman-provider-setup.mdx` around lines 57 - 61, The
text "Verify the socket is reachable from Windows" is misleading because the
shown command (echo $XDG_RUNTIME_DIR/podman/podman.sock) runs in WSL and only
prints the Linux-side path; update Step 3 wording to clarify the execution
context by stating that the command should be run inside WSL (or the Linux
environment) to display the socket path and separately instruct how to confirm
Windows can reach that socket (for example by translating the path or testing
with a Windows-side client), and keep the example command `echo
$XDG_RUNTIME_DIR/podman/podman.sock` as the WSL-specific step.

Comment on lines +145 to +149
A successful `devsy ssh` connection confirms the workspace is running under Podman. To verify the Podman binary inside the workspace:

```bash
podman --version
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use a provider/runtime verification step instead of checking podman inside the workspace.

Line 145 suggests podman --version inside the workspace, but workspace containers often won’t include Podman CLI. This can produce a false failure in an otherwise-correct setup.

Suggested doc tweak
-A successful `devsy ssh` connection confirms the workspace is running under Podman. To verify the Podman binary inside the workspace:
+A successful `devsy ssh` connection confirms the workspace is running. To verify Podman is the active runtime, check from the host:
 
 ```bash
-podman --version
+devsy provider list
+# or inspect running containers with:
+podman ps
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion
A successful `devsy ssh` connection confirms the workspace is running. To verify Podman is the active runtime, check from the host:

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/pages/tutorials/podman-provider-setup.mdx` around lines 145 - 149,
Replace the in-workspace check that tells users to run "podman --version" (which
can fail because workspace images may not include the Podman CLI) with
provider/runtime verification commands: instruct users to run "devsy provider
list" to confirm the provider is Podman and/or run "podman ps" on the host to
inspect running containers; update the text around the former "podman --version"
mention to show these alternative commands ("devsy provider list" and "podman
ps") and remove the in-container Podman version check.


### `podman compose` vs `docker-compose`

Podman v4+ ships `podman compose` as a built-in subcommand backed by the `podman-compose` Python library. It is compatible with `docker-compose` v2 syntax for most workloads. If your `devcontainer.json` or workspace scripts call `docker-compose` directly, replace those calls with `podman compose` or create a shell alias:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

According to official Podman documentation, is podman compose always a built-in implementation, or does it delegate to external providers (such as docker-compose or podman-compose) depending on configuration/version?

💡 Result:

Yes. Per the official Podman documentation, podman compose is “a thin wrapper around an external compose provider” (e.g., docker-compose or podman-compose), and it passes the specified options plus the command/arguments directly to that provider. By default, the compose providers are docker-compose and podman-compose, with docker-compose taking precedence if installed. The provider can be changed via the compose_providers setting in containers.conf(5) (or the PODMAN_COMPOSE_PROVIDER environment variable), so it is not always a built-in implementation of Compose itself; it delegates to whichever external provider is configured/available. [1]

Citations:


Remove inaccurate claim about podman compose implementation.

Line 180 states that podman compose is "a built-in subcommand backed by the podman-compose Python library." According to official Podman documentation, podman compose is a thin wrapper around external compose providers (such as docker-compose or podman-compose), not a built-in implementation. The backing provider is configurable and not always podman-compose. Use neutral wording that focuses on compatibility instead:

Podman v4+ includes the podman compose command, which is compatible with docker-compose v2 syntax for most workloads.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/pages/tutorials/podman-provider-setup.mdx` at line 180, Replace the
inaccurate sentence that claims "podman compose" is "a built-in subcommand
backed by the `podman-compose` Python library" with neutral wording stating that
Podman v4+ includes the `podman compose` command and that it is compatible with
`docker-compose` v2 syntax for most workloads; update the paragraph containing
the phrase "podman compose" so it no longer asserts a specific backing provider
and instead notes that the backing provider can vary.

@skevetter
skevetter merged commit ab8d905 into main May 14, 2026
57 checks passed
@skevetter
skevetter deleted the skevetter/devsy-101-podman-docs branch May 14, 2026 13:15
@coderabbitai coderabbitai Bot mentioned this pull request Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant