I know by default docker creates a virtual bridge docker0
, and all container network are linked to docker0
.
As illustrated above:
- container
eth0
is paired withvethXXX
vethXXX
is linked todocker0
same as a machine linked to switch
But what is the relation between docker0
and host eth0
?
More specifically:
- When a packet flows from container to docker0, how does it know it will be forwarded to eth0, and then to the outside world?
- When an external packet arrives to eth0, why it is forwarded to docker0 then container? instead of processing it or drop it?
Question 2 can be a little confusing, I will keep it there and explained a little more:
- It is a return packet that initialed by container(in question 1): since the outside does not know container network, the packet is sent to host
eth0
. How it is forwarded to container? I mean, there must be some place to store the information, how can I check it?
Thanks in advance!
After reading the answer and official network articles, I find the following diagram more accurate that docker0
and eth0
has no direct link,instead they can forward packets:
http://dockerone.com/uploads/article/20150527/e84946a8e9df0ac6d109c35786ac4833.png