Docker 容器如何和宿主机通信+容器网络知识+容器网络操作命令

整合 Docker
阅读数: 1559 2023年03月25日

如何获得宿主机IP

Linux 获得宿主机IP

在Linux下安装Docker的时候,会在宿主机安装一个虚拟网卡 docker0,我们可以使用宿主机在docker0上的IP地址来代替localhost

首先,使用如下命令查询宿主机IP地址:

1 2 3 4 5 6 7

$ ip addr show docker0 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default    link/ether 02:42:d5:4c:f2:1e 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:d5ff:fe4c:f21e/64 scope link       valid_lft forever preferred_lft forever

可以发现宿主机的IP是 172.17.0.1

Windows 和 macOS 获得宿主机IP

在 Windows 和 macOS 平台下并没有docker0虚拟网卡,这时候可以使用 host.docker.internal(证实有效)、gateway.docker.internal 这个特殊的DNS名称来解析宿主机IP。

由此发现,不同系统下宿主机的IP是不同的,所以使用宿主机IP,不能跨环境通用。

Dockder 网络知识讲解

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

网络模式

简介

Host

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

Bridge

此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

None

该模式关闭了容器的网络功能。

Container

创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

在docker中使用 --network host 来为容器配置 host 网络:

1

$ docker run -d --name nginx --network host nginx

上面的命令中,没有必要像前面一样使用-p 80:80 -p 443:443来映射端口,是因为本身与宿主机共用了网络,容器中暴露端口等同于宿主机暴露端口。

使用host网络不需要修改nginx.conf,仍然可以使用localhost,因而通用性比上一种方法好。但是,由于host网络没有bridge网络的隔离性好,使用host网络安全性不如bridge高。

参考:https://www.cnblogs.com/hahaha111122222/p/13370773.html

当然也可以使用 docker network create 创建网络,把指定容器连接到同一个网络,实现通信;

Docker 网络相关命令讲解

docker network connect #将容器连接到网络 docker network create #创建一个网络 docker network disconnect #断开容器的网络 docker network inspect #显示一个或多个网络的详细信息 docker network ls #列出网络 docker network prune #删除所有未使用的网络 docker network rm #删除一个或多个网络

docker network ls 列出网络

docker network ls命令用于列出网络。列出引擎守护进程知道的所有网络。 这包括跨群集中多个主机的网络。

用法

docker network ls [OPTIONS]

选项

名称,简写

默认

说明

--filter, -f


提供过滤器值(例如’

driver = bridge

‘)

--format


使用Go模板的美化网络

--no-trunc

false

不要截断输出

--quiet, -q

false

只显示网络ID

docker network create 创建网络

docker network create命令用于创建一个新的网络连接。

DRIVER接受内置网络驱动程序的桥接或覆盖。如果安装了第三方或自己的自定义网络驱动程序,则可以在此处指定

DRIVER。 如果不指定

--driver选项,该命令将为您自动创建一个桥接网络。 当安装

Docker Engine时,会自动创建桥接网络。 该网络对应于Engine传统依赖的

docker0网桥。 当启动使用

docker run运行新容器时,它将自动连接到此桥接网络。不能删除此默认网桥,但可以使用

用法

docker network create [OPTIONS] NETWORK

选项

名称,简写

默认

说明

--attachable

false

启用手动容器安装

--aux-address

map[]

网络驱动程序使用的辅助IPv4或IPv6地址

--driver, -d

bridge

驱动程序管理网络

--gateway


用于主子网的IPv4或IPv6网关

--internal

false

限制对网络的外部访问

--ip-range


从子范围分配容器

ip

--ipam-driver

default

IP地址管理驱动程序

--ipam-opt

map[]

设置IPAM驱动程序的具体选项

--ipv6

false

启用IPv6网络

--label


在网络上设置元数据

--opt, -o

map[]

设置驱动程序特定选项

--subnet


表示网段的CIDR格式的子网

docker network rm 删除一个或多个网络

docker network rm命令用于删除一个或多个网络。按名称或标识符删除一个或多个网络。 要删除网络,必须要先断开连接到它的任何容器的网络。

用法

docker network rm NETWORK [NETWORK...] Shell

选项

名称,简写

默认

说明

--force, -f

false

不要提示确认

docker network connect 将容器连接到网络

docker network connect命令用于将容器连接到网络。可以按名称或ID连接容器。 一旦连接,容器可以与同一网络中的其他容器通信。

用法

docker network connect [OPTIONS] NETWORK CONTAINER Shell

选项

名称,简写

默认

说明

--alias


为容器添加网络范围的别名

--ip


指定IP地址

--ip6


指定IPv6地址

--link


添加链接到另一个容器

--link-local-ip


添加容器的链接本地地址

docker network disconnect 断开容器的网络

docker network disconnect命令用于断开容器的网络。容器必须运行才能将其与网络断开连接。

用法

docker network disconnect [OPTIONS] NETWORK CONTAINER

选项

名称,简写

默认

说明

--force, -f

false

强制容器断开网络的连接

docker network inspect 显示一个或多个网络的详细信息

docker network inspect命令用于显示一个或多个网络的详细信息。它返回有关一个或多个网络的信息。 默认情况下,此命令将所有结果呈现在JSON对象中。

用法

docker network inspect [OPTIONS] NETWORK [NETWORK...]

选项

名称,简写

默认

说明

--format, -f


使用给定的Go模板格式化输出

docker network prune 删除所有未使用的网络

docker network prune命令用于删除所有未使用的网络。未使用的网络是不被任何容器引用的网络。

用法

docker network prune [OPTIONS]

选项

名称,简写

默认

说明

--force, -f

false

不要提示确认


参考资料
https://jingsam.github.io/2018/10/16/host-in-docker.html
https://www.yiibai.com/docker/network_prune.html
phpriji.cn | 网站地图 | 沪ICP备17015433号-1