mirror of
https://github.com/containers/podman-compose.git
synced 2025-04-11 11:08:47 +02:00
Support docker-compose like default network behavior
Signed-off-by: Songmin Li <lisongmin@protonmail.com>
This commit is contained in:
parent
376f0817e6
commit
2cfc617f9e
@ -110,6 +110,26 @@ x-podman:
|
||||
By default `default_net_name_compat` is `false`. This will change to `true` at some point and the
|
||||
setting will be removed.
|
||||
|
||||
## Compatibility of default network behavior between docker-compose and podman-compose
|
||||
|
||||
When there is no network defined (neither network-mode nor networks) in service,
|
||||
The behavior of default network in docker-compose and podman-compose are different.
|
||||
|
||||
| Top-level networks | podman-compose | docker-compose |
|
||||
| ------------------------------ | -------------------------- | -------------- |
|
||||
| No networks | default | default |
|
||||
| One network named net0 | net0 | default |
|
||||
| Two networks named net0, net1 | podman(`--network=bridge`) | default |
|
||||
| Contains network named default | default | default |
|
||||
|
||||
To enable compatibility between docker-compose and podman-compose, specify
|
||||
`default_net_behavior_compat: true` under global `x-podman` key:
|
||||
|
||||
```yaml
|
||||
x-podman:
|
||||
default_net_behavior_compat: true
|
||||
```
|
||||
|
||||
## Custom pods management
|
||||
|
||||
Podman-compose can have containers in pods. This can be controlled by extension key x-podman in_pod.
|
||||
|
2
newsfragments/default_net_behavior_compat.feature
Normal file
2
newsfragments/default_net_behavior_compat.feature
Normal file
@ -0,0 +1,2 @@
|
||||
Support docker-compose like default network behavior when no network defined in service via `default_net_behavior_compat` feature flag.
|
||||
|
@ -1998,13 +1998,23 @@ class PodmanCompose:
|
||||
nets = compose.get("networks", {})
|
||||
if not nets:
|
||||
nets["default"] = None
|
||||
|
||||
self.networks = nets
|
||||
if len(self.networks) == 1:
|
||||
self.default_net = list(nets.keys())[0]
|
||||
elif "default" in nets:
|
||||
self.default_net = "default"
|
||||
if compose.get("x-podman", {}).get("default_net_behavior_compat", False):
|
||||
# If there is no network_mode and networks in service,
|
||||
# docker-compose will create default network named '<project_name>_default'
|
||||
# and add the service to the default network.
|
||||
# So we always set `default_net = 'default'` for compatibility
|
||||
if "default" not in self.networks:
|
||||
self.networks["default"] = None
|
||||
else:
|
||||
self.default_net = None
|
||||
if len(self.networks) == 1:
|
||||
self.default_net = list(nets.keys())[0]
|
||||
elif "default" in nets:
|
||||
self.default_net = "default"
|
||||
else:
|
||||
self.default_net = None
|
||||
|
||||
allnets = set()
|
||||
for name, srv in services.items():
|
||||
srv_nets = srv.get("networks", self.default_net)
|
||||
|
Loading…
Reference in New Issue
Block a user