I have a server VLAN of 10.101.10.0/24 and my Docker host is 10.101.10.31. How do I configure a bridge network on my Docker host (VM) so that all the containers can connect directly to my LAN network without having to redirect ports around on the default 172.17.0.0/16? I tried searching but all the howtos I've found so far have resulted in losing SSH session which I had to go into the VM from a console to revert the steps I did.
相关问题
- Docker task in Azure devops won't accept "$(pw
- IPAddress.[Try]Parse parses 192.168 to 192.0.0.168
- Unable to run mariadb when mount volume
- Unspecified error (0x80004005) while running a Doc
- What would prevent code running in a Docker contai
There's multiple ways this can be done. The two I've had most success with are routing a subnet to a docker bridge and using a custom bridge on the host LAN.
Docker Bridge, Routed Network
This has the benefit of only needing native docker tools to configure docker. It has the down side of needing to add a route to your network, which is outside of dockers remit and usually manual (or relies on the "networking guy").
Enable IP forwarding
Create a docker bridge with new subnet on your VM network, say
10.101.11.0/24
Tell the rest of the network that
10.101.11.0/24
should be routed via10.101.10.X
where X is IP of your docker host. This is the external router/gateway/"network guy" config. On a linux gateway you could add a route with:Create containers on the bridge with 10.101.11.0/24 addresses.
Then your done. Containers have routable IP addresses. If you're ok with the network side, or run something like RIP/OSPF on the network or Calico that takes care of routing then this is the cleanest solution.
Custom Bridge, Existing Network (and interface)
This has the benefit of not requiring any external network setup. The downside is the setup on the docker host is more complex. The main interface requires this bridge at boot time so it's not a native
docker network
setup. Pipework or manual container setup is required.Using a VM can make this a little more complicated as you are running extra interfaces with extra MAC addresses over the main VM's interface which will need additional "Promiscuous" config first to allow this to work.
The permanent network config for bridged interfaces varies by distro. The following commands outline how to set the interface up and will disappear after reboot. You are going to need console access or a seperate route into your VM as you are changing the main network interface config.
Create a bridge on the host.
In
/etc/sysconfig/network-scripts/ifcfg-br0
Attach the primary interface to the bridge, usually
eth0
In
/etc/sysconfig/network-scripts/ifcfg-eth0
Reconfigure your bridge to have
eth0
's ip config.Attach containers to bridge with
10.101.10.0/24
addresses.Or use a DHCP client inside the container
Docker macvlan network
Docker has since added a network driver called
macvlan
that can make a container appear to be directly connected to the physical network the host is on. The container is attached to aparent
interface on the host.This will suffer from the same VM/softswitch problems where the network and interface will need be promiscuous with regard mac addresses.