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
3125

被折叠的 条评论
为什么被折叠?



