← Back to context

Comment by dns_snek

7 hours ago

> And if you bothered to look at that comment then why do you ignore what 'macvlan' - which is an actual bridge both in terms of a Linux device and the functionality - is not called 'bridge'?

Because renaming things that map 1:1 onto the underlying concepts is a terrible idea that makes learning and communication harder by introducing ambiguity and indirection. "bridge" now means multiple things and not only is it needlessly obfuscated, it's wrong (explained later). I _hate_ projects that do this.

> Because you don't understand the problem. More so, you ignore the actual question there about the broadcast domains.

A Docker 'bridge' network driver creates a broadcast domain between containers attached to that network.

Rhetorical question, maybe it'll help you find a source of misunderstanding: Why do you expect it to join the broadcast domains of your containers and your LAN? And which LAN, exactly?

> No, if even if you use a bridge internally when your container is on a isolated network which is invisible to anyone on your network and the container access the network behind your host through the NAT - this can't be called a bridge.

Your misunderstanding seems to stem from the flawed assumption/expectation that every container is automatically attached to your LAN. Therefore you incorrectly expect and demand that term "bridge" accurately describe the logical connection between your container and your LAN.

Docker networks are entities independent of your LAN, they're isolated networks that primarily serve to connect containers amongst themselves.

A Docker 'bridge' network is not necessarily routed to LAN either so your suggestion of calling them "hostnatnetwork" is wrong. Auto-configuration of NAT between the internal bridge network and your LAN is just a convenience feature which you can disable, it's not an inherent property of bridge networks.

Disabling NAT for a specific brige network (com.docker.network.bridge.enable_ip_masquerade): https://docs.docker.com/engine/network/drivers/bridge/

Disabling auto-configuration of all firewall rules: https://docs.docker.com/engine/network/packet-filtering-fire...

> But hey, I'm just knowledge lacking guy without experience at all, just yesterday saw a computer a first time in my life, sure, sure.

No I didn't say that, I think you suffer from the curse of having a lot of previous experience in an adjacent area where you built a strong mental model of how things ought to work, but now you're trying to forcefully apply this same mental model onto Docker.

All of this networking terminology is consistent and applied correctly but for some reason it's not clicking with your previous knowledge and you're trying to fit a square peg through a round hole. Take a step back, investigate.

> So ten years late?

Don't shift the goalposts. You claimed it still doesn't exist.

> No I didn't say that, I think you suffer from the curse of having a lot of previous experience in an adjacent area where you built a strong mental model of how things ought to work, but now you're trying to forcefully apply this same mental model onto Docker. I think you just proved his point. Docker came onto the scene and hit roadblocks in enterprises where sysadmins lived. These architectural and terminology choices ran head on into well established domains. Yes, docker did change things, but I think his point is it would’ve had more success with paying customers if the authors of docker had a better understanding of established network administration and system administration concepts from the start (though these were the early devops days…). That lack of understanding caused adoption friction in enterprise space, and different choices could’ve prevented that without changing at all the paradigm of what docker is.

The docker mental model isn’t crazy different. Design choices made it unnecessarily less compatible with existing mental models. This probably contributed to the feeling of it being revolutionary, but impeded its adoption with paying customers.

  • Can you be more concrete?

    In my experience adoption was primarily driven by developers and sacrificing clarity would hurt adoption. This perfect familiarity was never achievable anyhow. Docker was a completely new paradigm in software development, similar to how modern cars aren't just horse carriages without the horse. It transformed everything from development, testing, deployment, updates.

    Experienced sysadmins often tried to approach it with "VMs but with less overhead" mentality, which couldn't possibly work. Coworkers would ask me how they can install SSH daemons in containers to update packages and view logs, or they would refuse to adopt Dockerfiles, sometimes setting up the container manually and exporting the image. They would wonder how to install many different services in 1 container and handle crashes, etc. It was a huge shift.

    > Design choices made it unnecessarily less compatible with existing mental models.

    Again, I disagree. Whose mental model do you prioritize? How invested are you in making Docker work just like whatever elaborate system those enterprise admins used before?

    Let's not forget that by creating new abstractions, you're penalizing users who already possess foundational knowledge of the primitives. If you do this then I'm probably going to get a whiff that you care more about enterprise sales than developer experience (duh) which is a huge red flag for me.

> Because renaming things that map 1:1 onto the underlying concepts is a terrible idea that makes

Sorry, but you do insist on naming 'docker' bridge a bridge because it's underlying tech is a bridge. Make up your mind.

> A Docker 'bridge' network driver creates a broadcast domain between containers attached to that network.

And noone absolutely ever cared about what it's a bridge down there. It could be using gronklew and maybe 20 people on the planet would care to learn what it is.

You are quite bent on it, but nobody cares how the containers talk between each other.

> Why do you expect it to join the broadcast domains of your containers and your LAN?

I expect a setting named 'bridge' in some $thing to actually implement a bridge.

Just like you pressing an AC button in your car expect a very specific thing to turn on/off and not 'Artifically flavoured windshield wipers served in a Container'.

Why do I want it is on me. Maybe I need it. Maybe I control my network and freely give out addresses to anything. Maybe I don't run on some cheap VPS somewere with only 1 IP I can't choose nor change. Bazillion of options. None matters because this is not about 'why do you want it'.

> And which LAN, exactly?

The path of a least automagik.

Only one ethernet interface? Then connect to that ethernet interface. Bitch in the logs what automagik was used and this can lead to the problems.

Many interfaces? Just shutdown (least pain for newbies) or start without attaching (harder to troubleshoot for newbies). Bitch in the logs in either case.

> Your misunderstanding seems to stem from the flawed assumption/expectation that every container is automatically attached to your LAN

'Your misunderstanding seems to stem what there are some people assume what they are driving in like c-a-a-r. When even 5y.o. knows it's the wheels what drives you around.'

> Docker networks are entities independent of your LAN, they're isolated networks that primarily serve to connect containers amongst themselves.

Yes, exactly. Don't call it 'bridge' ~20 years ago and we don't have this talk here.

> Auto-configuration of NAT between the internal bridge network and your LAN is just a convenience feature which you can disable, it's not an inherent property of bridge networks.

It's not even a property of a bridge network. For someone claming knowledge superiority this is a quite lame statement.

> links

Really.

> previous experience in an adjacent area where

Ah, yes, irrelevant 'adjacent area' of computer networks. I'm out of words.[0]

> All of this networking terminology is consistent and applied correctly

No. Go drive your wheels home.

> Don't shift the goalposts. You claimed it still doesn't exist.

I'm just mentioned RUN as an example. You decided what multiline is the goalpost.

And yes, if even the official Docker images doesn't use RUN heredocs then... there is something wrong with them. Like being implemented too late.

[0] but perfectly explains your previous 'flawed assumption'

  • > And noone absolutely ever cared about what it's a bridge down there.

    Just like nobody ever cared that the container isn't bridged to their LAN in the first place - in fact the isolation is a feature.

    But you should care, it's only the most common building block of network isolation for containers/VMs on Linux.

    ---

    I'm not going to get into it further. I tried to explain nicely but you seem hell bent on complaining and not learning anything new. At this point the appropriate response is: RTFM, it's all in there, their docs are great.

    If you don't have a clue about how things work under the hood and if you have no interest in learning anything, then stop complaining about imaginary technical inaccuracies.