docker 网络简介
docker
在安装时会默认创建三个网络,
bridge
(创建容器默认连接到此网络)、
none
、
host
。
host
直接和宿主机共用网络。bridge
网络隔离,通过虚拟网桥(一般是docker0
)与宿主机通信。none
禁用网络功能。
docker network ls
可查看网络设置,输出如下:
NETWORK ID NAME DRIVER SCOPE
1363ad4ba2a5 bridge bridge local
715796504a13 host host local
723f2680cdad none null local
创建容器时的网络初始化
Docker
创建一个容器的时候,会执行如下操作:
- 创建一对虚拟接口,分别放到本地主机和新容器中;
- 本地主机一端桥接到默认的
docker0
或指定网桥上,并具有一个唯一的名字,如veth65f9
; - 容器一端放到新容器中,并修改名字作为
eth0
,这个接口只在容器的命名空间可见; - 从网桥可用地址段中获取一个空闲地址分配给容器的 eth0,并配置默认路由到桥接网卡
veth65f9
。
完成这些之后,容器就可以使用
eth0
虚拟网卡来连接其他容器和其他网络。
使用宿主机 IP
host 模式
该模式下容器可以直接使用
127.0.0.1
,
localhost
来访问宿主机。
在
docker
中使用
--network host
来为容器配置
host
网络:
docker run --network host host-main
docker-compose
使用
network_mode: "host"
进行配置:
version: "3"
services:
main:
build:
context: .
dockerfile: ./dockerfile
network_mode: "host"
bridge 模式
Linux
可以使用宿主机在
docker0
上的
IP
来代替
localhost
。
- 查询宿主机
IP
ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:5a:02:53:f5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:5aff:fe02:53f5/64 scope link
valid_lft forever preferred_lft forever
可以发现宿主机的
IP
是
172.17.0.1
,那么将地址
http://localhost:4780
改为
http://172.17.0.1:4780
即可访问。
Windows
同理,
Windows
中我们也可以找到虚拟网卡,查看
IP
进行更换
http://localhost:4780
=>
http://192.168.236.129:4780
Windows
还可以通过
host.docker.internal
这个特殊的
DNS
名称来解析宿主机
IP
。
hosts
映射在
C:\Windows\System32\drivers\etc\hosts
,文件内容如下:
http://localhost:4780
=>
http://host.docker.internal:4780
参考
官网
Docker网络
Docker网络详解——原理篇
Docker容器访问宿主机网络
版权归原作者 Grassto 所有, 如有侵权,请联系我们删除。