Skip to content

Patch podman support - #418

Open
ntninja wants to merge 5 commits into
stepchowfun:mainfrom
ntninja:patch-podman-support
Open

ntninja wants to merge 5 commits into
stepchowfun:mainfrom
ntninja:patch-podman-support

Conversation

@ntninja

@ntninja ntninja commented Sep 23, 2026

Copy link
Copy Markdown
  • Fixes Podman regression in v0.25.1 #346 by introducing separate Podman engine support with CLI switch
  • Adds CLI switch for selecting Podman/Docker binary and updates codebase to no longer hard-code the name "docker" everywhere
  • Updates the Dockerfile to include podman-remote (symlinked as just podman)
  • Documents the projects as now being a Docker and Podman, rather than just Docker, project

Status: Ready

Fixes: #346

@ntninja

ntninja commented Sep 24, 2026 •

Copy link
Copy Markdown
Author

Also added untested integration test variant that uses Podman and the Podman engine support

I tested this in NixOS and it works without the argument patching script at #346 (comment).

@stepchowfun stepchowfun left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Thank you for this PR! Left some comments.

Comment thread toast.yml
# This will be called when the task finishes, regardless of whether it succeeded.
function cleanup {
# Delete the container created below to run the integration tests.
docker container rm --force quay.io/podman/stable

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I think the container name here has to match the name given below (--name podman).

Comment thread toast.yml
artifacts/docuum-aarch64-unknown-linux-musl

validate_release:
validate_release_docker:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I see the CI still tries to run validate_release and fails due to this rename. One solution is to make a new validate_release task that depends on validate_release_docker and validate_release_podman:

  validate_release:
    description: Validate the release.
    dependencies:
      - validate_release_docker
      - validate_release_podman

Comment thread toast.yml
quay.io/podman/stable
docker container cp "artifacts/docuum-x86_64-unknown-linux-musl" podman:/
docker container cp integration-test.sh podman:/
docker container exec podman ./integration-test.sh podman

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

When I run this, the test doesn't seem to pass:

+ docker container run --privileged --name podman --detach quay.io/podman/stable
bf6f56a3de472531bb18516e9944120d57fe58e862efc6be87568827fa4cea99
+ docker container cp artifacts/docuum-x86_64-unknown-linux-musl podman:/
+ docker container cp integration-test.sh podman:/
+ docker container exec podman ./integration-test.sh podman
Error response from daemon: container bf6f56a3de472531bb18516e9944120d57fe58e862efc6be87568827fa4cea99 is not running

Does it work for you?

Comment thread README.md

- Omit the `--tty` flag. This prevents Docuum from printing colored logs, which you probably don't want for a daemon.
- Configure Docker as a hard dependency. Ordinarily, Docuum and Docker can be started in any order, and Docuum will patiently wait for Docker to start if needed. However, when running Docuum as a Docker container, then of course Docker must be started first.
- If using Docker, configure Docker as a hard dependency. Ordinarily, Docuum and Docker can be started in any order, and Docuum will patiently wait for Docker to start if needed. However, when running Docuum as a Docker container, then of course Docker must be started first.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Since this is inside a section called "Running Docuum in a Docker container on a host capable of running Linux containers", I think maybe "If using Docker" reads a bit odd. Maybe we can adapt this whole section to apply to both Docker and Podman? (I see some change in that direction above.)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I left the wording of “Docker container” as-is as I see it as a synonym for “OCI container”. I can change the words “Docker container” to something else but otherwise I think the section is already made generic over Docker vs Podman.

(Minus the mistakes in that section you also noticed, of course.)

Comment thread README.md
Comment thread README.md
Comment thread toast.yml
}
trap cleanup EXIT

# Run the integration test suite [tag:integration_test_step]. Uses Podman-in-Docker.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Tagref will complain about the duplicate [tag:integration_test_step] tag. I think we can fix it by changing it to [group:integration_test_step] (and leave corresponding the ref in integration-test.sh unchanged).

Comment thread src/run.rs

// Ask Docker for the ID of an image.
fn image_id(image: &str) -> io::Result<String> {
fn image_id(command: &str, image: &str) -> io::Result<String> {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I think this would be improved by passing an Engine around instead of a command string, and then we could have a helper function that produces then name of the binary from the engine. This is not really the "command" but the name of the binary (the command would include the args).

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Oh I see, the user can customize the name/path of the binary in addition to setting the engine. Maybe being able to configure the engine is enough.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

On NixOS, the engine binary is not in $PATH by default. It can be explicitly added there of course but I actually implemented this whole thing by adding binary name passing first and then using the engine only for setting the default binary name.

Comment thread src/run.rs
Comment on lines +252 to +254
fn str_to_oscow(s: &str) -> Cow<'_, OsStr> {
<str as AsRef<OsStr>>::as_ref(s).into()
}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Maybe we can just build a Vec<String> (as before)?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Podman regression in v0.25.1

2 participants