An empty network namespace
A fresh network namespace contains a loopback interface and nothing else. No route to anywhere, no address, no connectivity.
Everything a container can reach is therefore something explicitly wired to it, and the wiring uses ordinary Linux facilities.
The standard arrangement is a virtual ethernet pair: two connected interfaces where anything sent into one comes out of the other. One end is placed inside the container's namespace and named eth0; the other stays on the host and is attached to a bridge, a software switch.
container ns: eth0 <=====> vethXXXX :host
|
docker0 bridge
|
host routing
Every container on the same bridge gets an address on a private subnet, and the bridge switches traffic between them. Reaching the outside world goes through the host's routing table, with network address translation rewriting the private source address to the host's.
None of that is container technology. It is a virtual cable, a software switch and NAT, all of which the kernel has had for years, assembled automatically on your behalf.

