docker 容器访问宿主机服务
docker在安装时会默认创建三个网络,bridge(创建容器默认连接到此网络)、none、host。
·
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
参考
更多推荐
已为社区贡献1条内容
所有评论(0)