Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] containers.list() returns a list of containers with partial/missing "Mounts" attribute values #488

Open
D3vil0p3r opened this issue Dec 19, 2024 · 0 comments

Comments

@D3vil0p3r
Copy link

D3vil0p3r commented Dec 19, 2024

During my tests I noted that podman py containers.list() function returns a list of containers with partial/missing Mounts attribute values.

In particular, the Mounts attribute values are correctly returned when containers.create() function is used but not when containers.list() is used.

Here the Python code with the evidence (remember to change source values with some your existing dirs`):

import podman
from podman import PodmanClient

client = podman.from_env()
client.ping()
docker_create_function = client.containers.create
docker_args = {"image": "athenaos/base:latest",
               "name": "exegol-default",
               "mounts": [
                    {'target': '/opt/resources', 'source': '/home/athena/Exegol/exegol-resources', 'type': 'bind'},
                    {'target': '/workspaces', 'source': '/home/athena/.exegol/workspaces', 'type': 'bind'}
                ]}

container = docker_create_function(**docker_args)
print(container.attrs.get("Mounts", []))

print("Now use client.containers.list:")
docker_containers = client.containers.list(all=True, filters={"name": "exegol-"})

for container in docker_containers:
    print(container.attrs.get("Mounts", []))

After docker_create_function(**docker_args), the Mounts values are correctly returned as:

[{'Type': 'bind', 'Source': '/home/athena/Exegol/exegol-resources', 'Destination': '/opt/resources', 'Driver': '', 'Mode': '', 'Options': ['rbind'], 'RW': True, 'Propagation': 'rprivate'}, {'Type': 'bind', 'Source': '/home/athena/.exegol/workspaces', 'Destination': '/workspaces', 'Driver': '', 'Mode': '', 'Options': ['rbind'], 'RW': True, 'Propagation': 'rprivate'}]

Instead, when using client.containers.list(all=True), the Mounts values are erroneously returned as:

['/opt/resources', '/workspaces']

so, the other values are missing. Remember to remove the container by podman container stop exegol-default && podman container rm exegol-default to rerun the script above.

Docker py works correctly on both the cases.

Some useful information:

container.list() gets container info by:

response = self.client.get("/containers/json", params=params)

The content of this response is:

[{'AutoRemove': False, 'Command': ['/usr/bin/bash'], 'Created': '2024-12-19T20:39:51.101254185+01:00', 'CreatedAt': '', 'CIDFile': '', 'Exited': False, 'ExitedAt': -62135596800, 'ExitCode': 0, 'ExposedPorts': None, 'Id': '11ee4f548ec98c2be5bd41337a0cef75c3ecf8b7be56304055ad80e60eedd5c3', 'Image': 'docker.io/athenaos/base:latest', 'ImageID': '420f00cb47debe421a8b70b1a2e9ccf16a942cce2f70d1724eff6be764e95fea', 'IsInfra': False, 'Labels': None, 'Mounts': ['/opt/resources', '/workspaces'], 'Names': ['exegol-default'], 'Namespaces': {}, 'Networks': [], 'Pid': 0, 'Pod': '', 'PodName': '', 'Ports': None, 'Restarts': 0, 'Size': None, 'StartedAt': -62135596800, 'State': 'created', 'Status': ''}]

and the problem is that Mounts here has missing information.

I don't understand why this GET request does not take all the info, indeed by using podman cli, I can easily get those missing information:

podman inspect exegol-default --format "{{ .Mounts }}"

[{bind  /home/athena/Exegol/exegol-resources /opt/resources   [rbind] true rprivate } {bind  /home/athena/.exegol/workspaces /workspaces   [rbind] true rprivate }]

Also, by starting the API service by:

podman system service tcp:localhost:8080 --time=0 &

and running:

curl -k http://localhost:8080/v4.0.0/libpod/containers/json?all=true | jq

we get:

...
    "Labels": null,
    "Mounts": [
      "/opt/resources",
      "/workspaces"
    ],
    "Names": [
      "exegol-default"
    ],
...

so, probably the issue is on REST API side.

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

No branches or pull requests

1 participant