diff --git a/cmd/podman/system/service_abi.go b/cmd/podman/system/service_abi.go index 3dd86130f3..43f4c5472f 100644 --- a/cmd/podman/system/service_abi.go +++ b/cmd/podman/system/service_abi.go @@ -48,7 +48,7 @@ func restService(flags *pflag.FlagSet, cfg *entities.PodmanConfig, opts entities if listener == nil { return errors.New("unexpected fd received from systemd: cannot listen on it") } - libpodRuntime.SetRemoteURI(listeners[0].Addr().String()) + libpodRuntime.SetRemoteURI(listeners[0].Addr().Network() + "://" + listeners[0].Addr().String()) } else { uri, err := url.Parse(opts.URI) if err != nil { diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go index 440d81e48b..88a6cf01a8 100644 --- a/pkg/domain/infra/abi/system.go +++ b/pkg/domain/infra/abi/system.go @@ -10,6 +10,7 @@ import ( "os" "os/exec" "path/filepath" + "strings" "github.com/containers/podman/v5/libpod/define" "github.com/containers/podman/v5/pkg/domain/entities" @@ -48,19 +49,16 @@ func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) { info.Host.RemoteSocket.Path = uri.Path } - uri, err := url.Parse(ic.Libpod.RemoteURI()) - if err != nil { - return nil, err - } - - if uri.Scheme == "unix" { - err := fileutils.Exists(uri.Path) + // check if the unix path exits, if not unix socket we always we assume it exists, i.e. tcp socket + path, found := strings.CutPrefix(info.Host.RemoteSocket.Path, "unix://") + if found { + err := fileutils.Exists(path) info.Host.RemoteSocket.Exists = err == nil } else { info.Host.RemoteSocket.Exists = true } - return info, err + return info, nil } // SystemPrune removes unused data from the system. Pruning pods, containers, networks, volumes and images. diff --git a/test/e2e/systemd_activate_test.go b/test/e2e/systemd_activate_test.go index 72f539a3ed..d95b173e32 100644 --- a/test/e2e/systemd_activate_test.go +++ b/test/e2e/systemd_activate_test.go @@ -82,6 +82,11 @@ var _ = Describe("Systemd activate", func() { return testUtils.SystemExec(podmanTest.PodmanBinary, args) } + // regression check for https://github.com/containers/podman/issues/24152 + session := podmanRemote("info", "--format", "{{.Host.RemoteSocket.Path}}--{{.Host.RemoteSocket.Exists}}") + Expect(session).Should(testUtils.ExitCleanly()) + Expect(session.OutputToString()).To(Equal("tcp://" + addr + "--true")) + containerName := "top_" + testUtils.RandomString(8) apiSession := podmanRemote( "create", "--tty", "--name", containerName, "--entrypoint", "top",