forked from extern/podman-compose
add support for long port publishing format
This commit is contained in:
parent
069018c5b1
commit
ab135030c8
@ -611,6 +611,36 @@ def container_to_res_args(cnt, podman_args):
|
|||||||
if mem_res:
|
if mem_res:
|
||||||
podman_args.extend(('--memory-reservation', str(mem_res).lower(),))
|
podman_args.extend(('--memory-reservation', str(mem_res).lower(),))
|
||||||
|
|
||||||
|
def port_dict_to_str(port_desc):
|
||||||
|
# NOTE: `mode: host|ingress` is ignored
|
||||||
|
cnt_port = port_desc.get("target", None)
|
||||||
|
published = port_desc.get("published", None) or ""
|
||||||
|
host_ip = port_desc.get("host_ip", None)
|
||||||
|
protocol = port_desc.get("protocol", None) or "tcp"
|
||||||
|
if not cnt_port:
|
||||||
|
raise ValueError("target container port must be specified")
|
||||||
|
if host_ip:
|
||||||
|
ret = f"{host_ip}:{published}:{cnt_port}"
|
||||||
|
else:
|
||||||
|
ret = f"{published}:{cnt_port}" if published else f"{cnt_port}"
|
||||||
|
if protocol!="tcp":
|
||||||
|
ret+= f"/{protocol}"
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def norm_ports(ports_in):
|
||||||
|
if not ports_in:
|
||||||
|
ports_in = []
|
||||||
|
if isinstance(ports_in, str):
|
||||||
|
ports_in = [ports_in]
|
||||||
|
ports_out = []
|
||||||
|
for port in ports_in:
|
||||||
|
if isinstance(port, dict):
|
||||||
|
port = port_dict_to_str(port)
|
||||||
|
elif not isinstance(port, str):
|
||||||
|
raise TypeError("port should be either string or dict")
|
||||||
|
ports_out.append(port)
|
||||||
|
return ports_out
|
||||||
|
|
||||||
def container_to_args(compose, cnt, detached=True):
|
def container_to_args(compose, cnt, detached=True):
|
||||||
# TODO: double check -e , --add-host, -v, --read-only
|
# TODO: double check -e , --add-host, -v, --read-only
|
||||||
dirname = compose.dirname
|
dirname = compose.dirname
|
||||||
@ -675,8 +705,13 @@ def container_to_args(compose, cnt, detached=True):
|
|||||||
ports = cnt.get('ports', None) or []
|
ports = cnt.get('ports', None) or []
|
||||||
if isinstance(ports, str):
|
if isinstance(ports, str):
|
||||||
ports = [ports]
|
ports = [ports]
|
||||||
for i in ports:
|
for port in ports:
|
||||||
podman_args.extend(['-p', i])
|
if isinstance(port, dict):
|
||||||
|
port = port_dict_to_str(port)
|
||||||
|
elif not isinstance(port, str):
|
||||||
|
raise TypeError("port should be either string or dict")
|
||||||
|
podman_args.extend(['-p', port])
|
||||||
|
|
||||||
user = cnt.get('user', None)
|
user = cnt.get('user', None)
|
||||||
if user is not None:
|
if user is not None:
|
||||||
podman_args.extend(['-u', user])
|
podman_args.extend(['-u', user])
|
||||||
@ -1115,6 +1150,7 @@ class PodmanCompose:
|
|||||||
service_name=service_name,
|
service_name=service_name,
|
||||||
)
|
)
|
||||||
labels = norm_as_list(cnt.get('labels', None))
|
labels = norm_as_list(cnt.get('labels', None))
|
||||||
|
cnt["ports"] = norm_ports(cnt.get("ports", None))
|
||||||
labels.extend(podman_compose_labels)
|
labels.extend(podman_compose_labels)
|
||||||
labels.extend([
|
labels.extend([
|
||||||
"com.docker.compose.container-number={}".format(num),
|
"com.docker.compose.container-number={}".format(num),
|
||||||
|
@ -14,5 +14,20 @@ services:
|
|||||||
working_dir: /var/www/html
|
working_dir: /var/www/html
|
||||||
ports:
|
ports:
|
||||||
- 8002:8002
|
- 8002:8002
|
||||||
|
- target: 8003
|
||||||
|
host_ip: 127.0.0.1
|
||||||
|
published: 8003
|
||||||
|
protocol: udp
|
||||||
|
- target: 8004
|
||||||
|
host_ip: 127.0.0.1
|
||||||
|
published: 8004
|
||||||
|
protocol: tcp
|
||||||
|
- target: 8005
|
||||||
|
published: 8005
|
||||||
|
- target: 8006
|
||||||
|
protocol: udp
|
||||||
|
- target: 8007
|
||||||
|
host_ip: 127.0.0.1
|
||||||
volumes:
|
volumes:
|
||||||
- ./test2.txt:/var/www/html/index.txt:ro
|
- ./test2.txt:/var/www/html/index.txt:ro
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user