0


docker 容器访问宿主机服务

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

创建一个容器的时候,会执行如下操作:

  1. 创建一对虚拟接口,分别放到本地主机和新容器中;
  2. 本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字,如 veth65f9
  3. 容器一端放到新容器中,并修改名字作为 eth0,这个接口只在容器的命名空间可见;
  4. 从网桥可用地址段中获取一个空闲地址分配给容器的 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

  1. 查询宿主机 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容器访问宿主机网络

标签: docker network

本文转载自: https://blog.csdn.net/DisMisPres/article/details/127279708
版权归原作者 Grassto 所有, 如有侵权,请联系我们删除。

“docker 容器访问宿主机服务”的评论:

还没有评论