containers / containers/podman-compose

YAML parsing error occurred when binding a port to an IPv6 address.

Open
#694 0 comments 2 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
6.2k
Forks
622
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**

When using the form `ports: [::]:80:80`, an error occurs. However, when enclosing it with quotes, such as `ports: '[::]:80:80'`, no error occurs.

Please make sure it's not a bug in podman (in that case report it to podman)
or your understanding of docker-compose or how rootless containers work (for example, it's normal for rootless container not to be able to listen for port less than 1024 like 80)

please try to reproduce the bug in latest devel branch

**To Reproduce**

Steps to reproduce the behavior:
1. `vim docker-compose.yml`
```yaml
services:
debian:
container_name: debian
image: debian
ports: [::]:8000:8000
```
3. `podman-compose up`

**Expected behavior**

Return code 0.

**Actual behavior**

An error occurred.

**Output**

```
$ podman-compose version
['podman', '--version', '']
using podman version: 4.3.1
podman-composer version 1.0.3
podman --version
podman version 4.3.1
exit code: 0

$ podman-compose up
['podman', '--version', '']
using podman version: 4.3.1
Traceback (most recent call last):
File "/usr/bin/podman-compose", line 33, in
sys.exit(load_entry_point('podman-compose==1.0.3', 'console_scripts', 'podman-compose')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/podman_compose.py", line 1775, in main
podman_compose.run()
File "/usr/lib/python3/dist-packages/podman_compose.py", line 1022, in run
self._parse_compose_file()
File "/usr/lib/python3/dist-packages/podman_compose.py", line 1083, in _parse_compose_file
content = yaml.safe_load(f)
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/__init__.py", line 125, in safe_load
return load(stream, SafeLoader)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/__init__.py", line 81, in load
return loader.get_single_data()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/constructor.py", line 49, in get_single_data
node = self.get_single_node()
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 36, in get_single_node
document = self.compose_document()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 55, in compose_document
node = self.compose_node(None, None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
item_value = self.compose_node(node, item_key)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 82, in compose_node
node = self.compose_sequence_node(anchor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/composer.py", line 110, in compose_sequence_node
while not self.check_event(SequenceEndEvent):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/parser.py", line 98, in check_event
self.current_event = self.state()
^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/parser.py", line 474, in parse_flow_sequence_first_entry
return self.parse_flow_sequence_entry(first=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/parser.py", line 495, in parse_flow_sequence_entry
return self.parse_flow_node()
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/parser.py", line 268, in parse_flow_node
return self.parse_node()
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/yaml/parser.py", line 369, in parse_node
raise ParserError("while parsing a %s node" % node, start_mark,
yaml.parser.ParserError: while parsing a flow node
expected the node content, but found ':'
in "/root/Temp/docker-compose.yml", line 5, column 13
```

**Environment:**
- OS: Debian Linux 11
- podman version: 4.3.1
- podman compose version: 1.0.3

**Additional context**

When enclosing it(`ports: [::]:80:80`) with quotes, such as `ports: '[::]:80:80'`, the problem solved.The modified `docker-compose.yml` is:
```yaml
services:
debian:
container_name: debian
image: debian
ports: '[::]:8000:8000'
```

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.