Skip to content

Feature: Proper type hinting for UDP ports bindings #674

Closed

Description

@champialex

I'm trying to bind udp ports:

def telegraf(network: Network):
    ctr = DockerContainer(image="telegraf:1.31.1")
    ctr.with_volume_mapping(f"{CURRENT_DIR}/telegraf_test.conf", "/etc/telegraf/telegraf.d/telegraf_test.conf")
    ctr.with_exposed_ports("8094/tcp")  # Telegraf ports
    ctr.with_bind_ports("8125/udp", "8125/udp")
    ctr.with_bind_ports("8092/udp", "8092/udp")
    _connect_to_network(ctr, network, "telegraf")
    return ctr

It works fine, except that ports are type hinted as int, leading to sad squiggly lines in IDEs.

Could we change type hints of port APIs to allow strings, to make it nicer to define more fine grain port specs?

    def with_bind_ports(self, container: str, host: Optional[str] = None): ...

    def with_exposed_ports(self, *ports: str): ...
  
  def get_exposed_port(self, port: str): ...

Activity

  1. alexanderankin commented on Aug 12, 2024

    @alexanderankin
    Member

    open to a pr for this!

  2. Tranquility2 commented on Aug 21, 2024

    @Tranquility2
    Contributor

    please note that def get_exposed_port(self, port: str): ... is probably wrong as it uses

    mapped_port = self.get_docker_client().port(self._container.id, port)

    ->

    port_mappings = self.client.api.port(container_id, port)

    ->

        def port(self, container, private_port): 
            """
            Lookup the public-facing port that is NAT-ed to ``private_port``.
            Identical to the ``docker port`` command.
    
            Args:
                container (str): The container to look up
                private_port (int): The private port to inspect

    So the docker API expect it to be an int

    with_bind_ports & with_exposed_ports seems safe

  3. Tranquility2 commented on Aug 21, 2024

    @Tranquility2
    Contributor

    Opened #690

  4. added a commit that references this issue on May 4, 2025
    a0d4317
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions