containers / containers/podman-py

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

Open
#488 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
381
Forks
140
Avg merge
5h 30m
Merged PRs (30d)
1

Description

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`):
```python
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()](https://github.com/containers/podman-py/blob/d3dd1543591f163f6e5665dba7be9481de6a1590/podman/domain/containers_manager.py#L47) gets container info by:
```python
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:
```shell
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:
```json
...
"Labels": null,
"Mounts": [
"/opt/resources",
"/workspaces"
],
"Names": [
"exegol-default"
],
...
```
so, probably the issue is on REST API side.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.