this post was submitted on 31 Mar 2024
17 points (90.5% liked)

Selfhosted

40186 readers
619 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

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)

top 25 comments
sorted by: hot top controversial new old
[–] [email protected] 8 points 7 months ago* (last edited 7 months ago) (4 children)

You declare the ip in your setup, or in the yaml file. An example for the docker-compose file is in the link below. I'd expect you'll want to declare the network and such as well, if you're not familiar.

https://gist.github.com/natcl/3d881d00a56c8a961e6dab8ba51a5a37

[–] [email protected] 2 points 7 months ago

It worked, thank you

[–] [email protected] 2 points 7 months ago* (last edited 7 months ago)

This was a fast response, and doesn't cover the whole scope of handling networking in docker. As mentioned elsewhere there is a different network philosophy for Standalone Containers & Overlay networking.

[–] [email protected] 1 points 7 months ago

Thx. That helps a lot

[–] [email protected] 1 points 7 months ago (3 children)

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 4 points 7 months ago (1 children)

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.

[–] [email protected] 0 points 7 months ago (1 children)

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 3 points 7 months ago

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

[–] [email protected] 3 points 7 months ago (1 children)

docker compose isn't really scalable. If you need automatic, hgih availability load balancing, you should look into Kubernetes Ingress.

[–] [email protected] 2 points 7 months ago

It’s not as a fully scalable solution, no. Without swarm, last I checked, it cannot even really run on multiple instances. However, it does have the functionality to scale individual services within the same host if resources are available and the service can benefit from such a scaling. It is not very uncommon to see something require multiple worker instances and this breaks that paradigm.

Service discovery will certainly play a much larger role in even more orchestrated systems, but doesn’t mean it shouldn’t start here.

[–] [email protected] 1 points 7 months ago (1 children)

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.

[–] [email protected] 1 points 7 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.

[–] [email protected] 5 points 7 months ago (2 children)

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 3 points 7 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.

[–] [email protected] 2 points 7 months ago

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

[–] [email protected] 2 points 7 months ago* (last edited 7 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.

[–] [email protected] 1 points 7 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).

[–] [email protected] -1 points 7 months ago* (last edited 7 months ago) (1 children)

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]

[–] superbirra 2 points 7 months ago

nginx is no acronym or other shit you bad bot :P