all the containers change IP addresses frequently. For home assistant a static IP address of the proxy manager is mandatory in order to reach it. For jellyfin it is useful to see which device accesses jellyfin. If the IP always changes, it doesn’t work properly.

How do I fix a container IP with podman compose (or docker)

    • chiisana@lemmy.chiisana.net
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      8 months ago

      This feels like an anti-pattern that should be avoided. Docker compose allows for scaling individual services to have more than one instance. By hard assigning an IP address to a service, how is that going to be scaled in the future?

      I don’t know how to reconcile this issue directly for NPM, but the way to do this with Traefik is to use container labels (not hard assigning IP address) such that Traefik can discover the service and wire itself up automatically. I’d imagine there should be a similar way to perform service discovery in NPM?

      • aksdb@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        ·
        8 months ago

        The bigger issue (IMO) is, that you now have a hard requirement on the startup order of your services. If another one happens to get the IP assigned automatically befor your service starts that requests it explicitly, you now have a conflict that you manually have to resolve.

        DNS is the only sane solution here.

        • lemmyvore@feddit.nl
          link
          fedilink
          English
          arrow-up
          1
          arrow-down
          1
          ·
          8 months ago

          DNS can also give you some headaches. If you also need to reach other things on the LAN by name, or want to have a mesh VPN going with Tailscale, now you have to juggle three DNS domains.

          • aksdb@lemmy.world
            link
            fedilink
            English
            arrow-up
            3
            ·
            8 months ago

            I meant DNS within your container network. Exposed stuff should be mapped to host ports.

      • lemmyvore@feddit.nl
        link
        fedilink
        English
        arrow-up
        1
        ·
        8 months ago

        Docker can keep track of assigned ranges. It will either allocate around them or tell you there’s a conflict if you have explicit overlaps, and refuse to start the container.

        Also, for most self-hosters scaling is the least of their needs.

        • chiisana@lemmy.chiisana.net
          link
          fedilink
          English
          arrow-up
          1
          ·
          8 months ago

          Except it is explicitly being told to use a singular IP address here. So the engine is either going to go against explicit assignment or going to create a conflict within its own network. Neither of which are the expected behavior.

          Just because people are self hosting, doesn’t mean they should be doing things incorrectly.

  • towerful@programming.dev
    link
    fedilink
    English
    arrow-up
    5
    ·
    8 months ago

    If you have everything in a compose stack, you can use the container name. Docker (and im sure podman) will do a dns resolution to the IP.
    So you can use http://jellyfin:8000 instead of http://172.28.50.11:8000 (or whatever internal docker IPs are).
    Not sure if it works outside of a compose stack. Might use different container name schemes (where inside a compose stack it would be “jellyfin”, outside it might be “media-jellyfin-1” depending on folder names and various configs)

    • ikidd@lemmy.world
      link
      fedilink
      English
      arrow-up
      3
      ·
      8 months ago

      You need to create and specify a docker network to get different compose stacks to talk together directly. Default networks are separated between stacks, and have to bounce out to the host and back in, hence are only able to use the exposed ports of the target stack.

      You can also specify the IPs that individual services use inside that network if you wish, but docker should handle name resolution within a network.

    • GravitySpoiledOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      8 months ago

      So far I wasn’t successful with that method in home assistant. I use that method in arr

  • walden@sub.wetshaving.social
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    8 months ago

    For my setup/workflow, individual containers don’t get static IPs, but the machine that they run on gets a static IP. Docker is running on some sort of machine (either bare metal or a VM) which gets a static IP in my router’s settings.

  • lemmyvore@feddit.nl
    link
    fedilink
    English
    arrow-up
    1
    ·
    8 months ago

    You can specify a fixed IP range for a container in the private address space instead of letting Docker pick one. You can also pick a specific IP on that range for each container. You can also attach to the host public interface and get an IP from your LAN DHCP, or pick a MAC adress so you can get the same IP address each time from DHCP (as well as a name on the LAN DNS if you want).

  • Decronym@lemmy.decronym.xyzB
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    2
    ·
    edit-2
    8 months ago

    Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:

    Fewer Letters More Letters
    DHCP Dynamic Host Configuration Protocol, automates assignment of IPs when connecting to a network
    DNS Domain Name Service/System
    HTTP Hypertext Transfer Protocol, the Web
    IP Internet Protocol
    VPN Virtual Private Network
    nginx Popular HTTP server

    [Thread #645 for this sub, first seen 31st Mar 2024, 09:55] [FAQ] [Full list] [Contact] [Source code]

  • Jeena@jemmy.jeena.net
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    13
    ·
    8 months ago

    A container does not have an IP, only a network card has an IP. Containers normally use a specific port which normally is not changing like 8080 or 8123, etc. I think you misunderstood something with your setup.

    • Max-P@lemmy.max-p.me
      link
      fedilink
      English
      arrow-up
      7
      ·
      edit-2
      8 months ago

      The containers all have IPs unless you use the “host” network type, in which case it just stays in the host namespace, or “none” which ends up with an empty network namespace. And the IPs can indeed change. This is also why multiple containers can bind to the same port without colliding with eachother.

      Docker kind of hides it from you because when you use -p to publish a port, it sets up a proxy process for you to pass traffic from the port on the host to the port on the container.

      You usually have a docker0 bridge with an IP like 172.16.0.1, and if you run ip a in a container it’ll have a single interface with an IP of 172.16.0.2.

      https://docs.docker.com/network/

      • Max-P@lemmy.max-p.me
        link
        fedilink
        English
        arrow-up
        3
        ·
        8 months ago

        Those are just the basic ones too, when macvlan, macvtap, ipvlan gets involved it gets even crazier. You can directly attach containers to the network such that your router assigns it an IP via DHCP like it’s just another device plugged on your network.

        You can also share a network namespace with multiple containers, usually kubernetes/podman pods to enable for sidecar containers like Filebeat, Consul, Envoy, etcd and so on.

        If you use rootless containers, it’ll use slirp4netns to emulate the network entirely in userspace.

        In the cloud you usually end up with your pods directly attached to your VPC as well, like AWS Fargate serverless offerings.

    • poVoq@slrpnk.net
      link
      fedilink
      English
      arrow-up
      2
      ·
      8 months ago

      Inside the virtual docker network they do have temporary IPs and hostnames. But it is pointless to reference these IPs, just use the hostnames which should be identical to the container name.